[发明专利]Windows平台下实现单进程单线程完成端口的方法有效
申请号: | 202011038746.3 | 申请日: | 2020-09-28 |
公开(公告)号: | CN112114955B | 公开(公告)日: | 2021-05-14 |
发明(设计)人: | 吴建亮;胡鹏;符元湘 | 申请(专利权)人: | 广州锦行网络科技有限公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48;G06F9/50 |
代理公司: | 北京精金石知识产权代理有限公司 11470 | 代理人: | 杨兰兰 |
地址: | 510095 广东省广州*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | windows 平台 实现 进程 线程 完成 端口 方法 | ||
1.一种Windows平台下实现单进程单线程完成端口的方法,其特征在于,包括以下步骤:
S1:创建一个完成端口,线程数设为1;
S2:服务端创建一个socket;
S3:将创建的socket与创建的完成端口绑定,绑定时,线程数设为1;
S4:取得用于完成端口的accept_ex函数指针;
S5:投递accept_ex操作事件到完成端口的队列中;
S6:循环调用GetQueuedCompletionStatus()函数,每次调用采用即时返回的非阻塞模式;
步骤S6中,通过将GetQueuedCompletionStatus()函数中的参数dwMilliseconds设置为0,实现即时返回的非阻塞模式;
S7:根据GetQueuedCompletionStatus()函数的返回值的不同,进行对应于返回值的数据处理;
其中,步骤S7中判断的GetQueuedCompletionStatus()函数的所述返回值包括:GetQueuedCompletionStatus()函数中参数lpCompletionKey的返回值和GetQueuedCompletionStatus()函数中参数lpOverlapped的返回值,其中在lpOverlapped的返回值中自定义参数用于返回事件类型;
当GetQueuedCompletionStatus()函数的参数lpOverlapped返回值为RECV_POST操作事件时,执行如下操作:
处理客户端发送的数据,投递WSARecv操作事件到完成端口的队列中;
处理客户端发送的数据时,若服务端需要发送数据,投递WSASend操作事件到完成端口的队列中。
2.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于:
步骤S1中,使用CreateIoCompletionPort()函数创建完成端口,将CreateIoCompletionPort()函数中的参数NumberOfConcurrentThreads设置为1;
步骤S3中,使用CreateIoCompletionPort()函数将创建的socket与创建的完成端口绑定,且将CreateIoCompletionPort()函数中的参数NumberOfConcurrentThreads设置为1。
3.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于,当GetQueuedCompletionStatus()函数的参数lpCompletionKey返回值为ACCEPT_POST操作事件时,执行如下操作:
使用CreateIoCompletionPort()函数进行socket与完成端口的绑定,并且将参数NumberOfConcurrentThreads设置为1;
投递accept_ex操作事件和WSARecv操作事件到完成端口的队列中;
所述ACCEPT_POST操作事件为自定义的事件类型,用于表明客户端已经连接成功。
4.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于,步骤S7中,当GetQueuedCompletionStatus()函数的lpOverlapped返回值为SEND_POST操作事件时,执行如下操作:
投递WSASend操作事件到完成端口的队列中。
5.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于,步骤S7中,当GetQueuedCompletionStatus()函数的参数lpCompletionKey返回值为CLOSE_POST时,执行如下操作:
退出步骤S6的循环,结束进程。
6.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于,服务端使用socket()函数并创建一个socket。
7.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于,步骤S4中,使用WSAIoctl()函数取得类型为LPFN_ACCEPTEX的用于完成端口的accept_ex函数指针。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广州锦行网络科技有限公司,未经广州锦行网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011038746.3/1.html,转载请声明来源钻瓜专利网。