2009-12-02 5 views
0

je travaille sur un émulateur, et il envoie quelques paquets séparément, mais le client réception des paquets est capable de gérer plusieurs paquets entrants à partir d'une seule réception.C# - réseau ou serveur

Voici ma méthode:

/// <summary> 
    /// Sends a few packets at login to prepare the character for gameplay. 
    /// </summary> 
    /// <param name="character">The character to produce frame for.</param> 
    public void SendLoginWelcome(Character character) 
    { 
     character.Session.SendData(new NewMapRegionPacketComposer(character).Serialize()); 
     WelcomeScreen.Show(character); 
     SendCloseInventoryInterface(character); 
     SendTab(character, 6, 745); 
     SendTab(character, 7, 754); 
     SendTab(character, 11, 751); // Chat options 
     SendTab(character, 68, 752); // Chatbox 
     SendTab(character, 64, 748); // HP bar 
     SendTab(character, 65, 749); // Prayer bar 
     SendTab(character, 66, 750); // Energy bar 
     SendTab(character, 67, 747); 
     character.Session.SendData(new ConfigPacketComposer(character, 1160, -1).Serialize()); 
     SendTab(character, 8, 137); // Playername on chat 
     SendTab(character, 73, 92); // Attack tab 
     SendTab(character, 74, 320); // Skill tab 
     SendTab(character, 75, 274); // Quest tab 
     SendTab(character, 76, 149); // Inventory tab 
     SendTab(character, 77, 387); // Equipment tab 
     SendTab(character, 78, 271); // Prayer tab 
     SendTab(character, 79, 192); // Magic tab 
     SendTab(character, 81, 550); // Friend tab 
     SendTab(character, 82, 551); // Ignore tab 
     SendTab(character, 83, 589); // Clan tab 
     SendTab(character, 84, 261); // Setting tab 
     SendTab(character, 85, 464); // Emote tab 
     SendTab(character, 86, 187); // Music tab 
     SendTab(character, 87, 182); // Logout tab 
    } 

CloseInventory & Méthodes SendTab:

/// <summary> 
    /// Closes the inventory interface. 
    /// </summary> 
    /// <param name="character">The character to produce frame for.</param> 
    public void SendCloseInventoryInterface(Character character) 
    { 
     character.Session.SendData(new InterfaceConfigPacketComposer(character, 
      (short)(character.Hd ? 746 : 548), 71, true).Serialize()); 
    } 

    /// <summary> 
    /// Sends a tab interface. 
    /// </summary> 
    /// <param name="character">The character to produce frame for.</param> 
    /// <param name="tabId">The id of the tab.</param> 
    /// <param name="childId">The child if of the tab.</param> 
    public void SendTab(Character character, short tabId, short childId) 
    { 
     character.Session.SendData(new InterfacePacketComposer(character, 1, 
      (short)(childId == 137 ? 752 : (character.Hd ? 746 : 548)), 
      tabId, childId).Serialize()); 
    } 

La méthode Serialize() rejoint essentiellement l'en-tête et la charge utile togeather. La méthode SendData() envoie un tableau d'octets via le socket (de manière asynchrone).

Comme vous pouvez le voir, im envoyer plusieurs paquets essentiellement en même temps, mais dans différents tableaux. Ma question est de savoir ce qui serait le plus efficace pour la stabilité et les performances du serveur, en envoyant cette méthode dans un tableau (je dois joindre chacune de ces matrices en une, puis envoyer via le réseau) ou l'envoyer brutalement.

tableaux Joining peuvent causer des problèmes de performance, car il est un serveur multi-joueurs, plus les joueurs du serveur a, plus la charge du serveur est. Le fait de l'envoyer séparément ou de l'envoyer fusionné fait-il une différence?

Répondre

1

Plus vous envoyez de paquets, plus la bande passante est absorbée par le surdébit.

Il y a d'autres questions si ... je pense que le choix de udp vs TCPIP pour les sections de données est plus importante.

vraiment vous voulez être compresser les données que la bande passante et de la latence est le goulot d'étranglement ... les coûts décomprimer seront probablement beaucoup moins. En ce qui concerne la question de la performance, il est impossible de répondre a priori à ce qui est donné. Vraiment le problème est un problème d'optomisation de la fréquence des paquets vs la taille des paquets vs les chances d'arriver/reduncancy etc (si udp) par rapport à la taille de la taille totale des données à envoyer.

Ce n'est pas vraiment une réponse que j'ai peur, mais toute réponse autorisée serait vraiment irresponsable.

Vraiment, vous devez goûter à l'experiement.