本人工作是服務端性能測試,因工作需要開發機器人框架,選用底層的時候看到網上滿大街的IOCP介紹,還有說IOCP比WSAAsyncSelect復雜等等,所以只好轉WSAAsyncSelect實現。
因並發客戶端需要進行調試測試,壓力測試工具作為客戶端來說性能十分重要,沒有經過測試的鬼知道秒並發多少請求,秒並發多少connect,所以就需要實現高效服務端進行調試客戶端,在工作之余又繼續研究IOCP,吐槽這些無非就是,沒人想過怎么優化精簡流程,生搬硬套實現IOCP的處理,其實可以利用MSG和簡單IOCP模型簡單實現。
下圖介紹如何簡單實現流程,就那么簡單也不需要用到內存池,代碼參考“Windows網絡與通信程序設計王艷平”第四章 IOCPDemo,iocpsys這個做了太多處理,建議大家還是從IOCPDemo着手優化精簡方案,
鏈接: http://pan.baidu.com/s/1c2HTYLy 密碼: c6r2
主要用到的API有一下2個,其余的API和WSAAsyncSelect沒多大區別,調用WSASend、WSARecv等
CreateIoCompletionPort
GetQueuedCompletionStatus
看到這里,有小伙伴看到這里會說,pCompletionKey參數、OVERLAPPED結構、PerHandleData、PostQueuedCompletionStatus等等怎么都沒有了,沒錯我把這些統統都拋棄,用另一種方式實現
網上很多IOCP的壓力測試也很假,自己做的壓力客戶端秒破小豬IOCP服務端,有空再分享客戶端和服務端給小伙伴測試,效果杠杠滴,