完成端口

高并发服务器的实现方式一般有三种:

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)),各个线程。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值