我已經完成了我的研究,並且我知道實現高性能套接字服務器的最佳方式通常如下:使用異步套接字操作(專用SocketAsyncEventArgs/Operations以獲得最佳性能)異步回調,將請求推送到線程池傾向的處理隊列。超高性能套接字服務器 - 實現細節
我的問題,這個處理模型 - 有最大的性能:
1)時,應在插座的「結束」操作被調用(例如EndAccept或EndReceive)?應該在排隊請求之前在回調線程(IOCP)上調用它?或者在請求從隊列中取出並被處理(工作線程)時調用?
2)這個問題取決於#1的答案。何時應該調用下一個「開始」操作?我們應該在我們調用EndOperation之前調用它,還是應該在EndOperation之後立即調用它(排隊/處理請求之前)?
3)處理隊列可以簡單地爲.NET線程池嗎?使用.NET線程池與推出自己的同步處理隊列有什麼優點/缺點?
任何幫助,非常感謝。
你沒有做好你的研究:SocketAsyncEventArgs和Begin/End是兩種不同的模式。你不打電話給當您調用ReceiveAsync時EndReceive。 – dtb
關於#1,應該在回調和外部調用'EndXXX'操作(如果請求同步完成)。把它做正確有點棘手。看到這個[post](http://blogs.msdn。com/b/mjm/archive/2005/05/04/414793.aspx)進行解釋。如果你想避免這種情況並使用更優雅的解決方案,我建議你使用TPL和它的'FromAsync'。 –
@dtb你是對的,模型略有不同,但兩種模式都遵循通過回調進行異步處理的整體概念,我的問題仍然與 – shyneman