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?