在網上很多人討論.NET非同步SOCKET通訊的問題。
很多人都有誤解,都以為非要用系統底層的IOCP,實際上沒那麼麻煩,要相信.NET封裝了所有系統底層操作。
實際上.NET的IOCP微軟早有例子,下面是該例子:
class Server
{
private int m_numConnections; // the maximum number of connections the sample is designed to handle simultaneously
private int m_receiveBufferSize;// buffer size to use for each socket I/O operation
BufferManager m_bufferManager; // represents a large reusable set of buffers for all socket operations
const int opsToPreAlloc = 2; // read, write (don't alloc buffer space for accepts)
Socket listenSocket; // the socket used to listen for incoming connection requests
// pool of reusable SocketAsyncEventArgs objects for write, read and accept socket operations
SocketAsyncEventArgsPool m_readWritePool;
int m_totalBytesRead; // counter of the total # bytes received by the server
int m_numConnectedSockets; // the total number of clients connected to the server
Semaphore m_maxNumberAcceptedClients;
...略(參考MSDN,百度查詢關鍵字SocketAsyncEventArgs可查到此例子)
}
也就是微軟為SOCKET定義的那些BeginXXX(.NET2.0)或ReceiveAsync(.NET3.5)等等那些方法。
這是.NET完成連接埠的實現。
筆者開發了基於此的TCP伺服器,可以支援10萬人同時線上。