高并发服务器的实现方式一般有三种:
1.线程池
2.select机制
3.完成端口
完成端口模型创建过程
1.创建一个完成端口(HANDLE g_CompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0)))
2.创建一个服务工作线程A,其职责循环调用GetQueuedCompletionStatus(GetQueuedCompletionStatus(g_CompletionPort, &BytesTransferred, (LPDWORD)&pCliData, (LPOVERLAPPED *)&lpOverLapped, INFINITE))从I/o中获取数据,进行处理。
3.创建接收客户端连接线程B。
4.连接线程循环等待客户端的连接,并使用CreateIoCompletionPort(CreateIoCompletionPort((HANDLE)Accept, g_CompletionPort, (DWORD)pClientData, 0))将客户端socket和完成端口关联起来,然后发送wsasend或wsarecv,由于是异步操作直接返回,其余操作留给windows执行。
5.服务工作线程A的GetQueuedCompletionStatus取到数据马上返回,经过处理,发送wsasend或wsarecv继续循环接收数据进行处理。
6.接收客户端线程B就不停的接收,服务工作线程就不停的取数据进行操作。
7.结束不用了的,关闭完成端口PostQueuedCompletionStatus(PostQueuedCompletionStatus(g_CompletionPort, 0, (DWORD) NULL, NULL)),各个线程。