我一直在模擬器上工作,它分別發送幾個數據包,但接收數據包的客戶端能夠處理來自單個接收的多個數據包。C# - 網絡與服務器
這裏是我的方法:
/// <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 & 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());
}
的Serialize()
方法主要連接頭和togeather有效載荷。 的SendData()
方法只是通過套接字(異步地)發送一個字節數組。
正如你所看到的,IM基本上同時發送多個數據包,但在不同的陣列中。我的問題是什麼是對服務器的穩定性和性能的更高效,發送陣列(我有各自的陣列的加盟爲一體,然後通過網絡發送)或發送它已經由生後內的方法。
連接數組可能會導致一些性能問題,因爲這是一個多玩家服務器,服務器的玩家越多,服務器負載就越多。將單獨發送,與發送它合併有所作爲?