這幾天編寫了一個測試程序,測試我的網絡庫(KendyNet for Windows)的性能,主要用於模擬大量玩家在同一區域內,
互相可見情況下網絡的壓力情況.
測試環境:
客戶機和服務器 E5520 4GB windows 2008 server
千兆網.
客戶機啟動一個進程,建立360個連接到服務器,模擬360個客戶端,每個客戶端每秒發送16個28字節的封包,服務器
收到每個封包都將其轉發給所有的360個客戶端.
處理能力是每秒接收6000+,轉發220W+,CPU占滿單個核心,內存占用8M左右,封包一個來回的平均延時在46ms左右.
這已經達到了最大處理能力,再加連接就開始導致性能下降,內存消耗暴增.
https://github.com/sniperHW/KendyNet/tree/master/IOCP
可以取得測試代碼,需要注意的是,請將winsock2.h中的FD_SETSIZE從64改成1024,另外因為使用了
SetFileCompletionNotificationModes所以在xp,和windows 2003上是無法運行測試程序的 。
后面將會着手編寫KendyNet for linux的測試程序.
(2012-5-19,做了點優化,將wpacket_t和rpacket_t的產生從malloc換成對象池,目前可以穩定支持420個客戶端,每秒轉發290W個包,
當玩家超過450時,轉發量達到340W並維持了一段時間(大概一兩分鍾),cpu 13%,已經占滿單個核心,服務器逐漸處理不過來,延時變大,很快對象池空間耗盡。)
