.NET开发异步SOCKET (IOCP)
在网上很多人讨论.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万人同时在线。
转http://norke.blog.163.com/blog/static/276572082011828102721125/
浙公网安备 33010602011771号