一种进程间通信方法、电子设备及可读存储介质技术

技术编号:19543032 阅读:27 留言:0更新日期:2018-11-24 20:29
本发明专利技术提供了一种进程间通信方法、电子设备及可读存储介质,该方法包括:创建服务线程;创建异步的命名管道句柄和重叠IO,将命名管道句柄传入重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的异步任务,调用GetLastError函数,获得命名管道句柄的当前连接状态;在当前连接状态为ERROR_IO_PENDING时,将重叠IO存放至存储空间中,在当前连接状态为ERROR_PIPE_CONNECTED时,确定与命名管道句柄连接的第一客户端,处理与第一客户端对应的数据任务,在数据任务处理完成后,如果命名管道句柄的当前连接状态为ERROR_IO_PENDING,将重叠IO存放至存储空间中;通过服务线程循环查看存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。

An Interprocess Communication Method, Electronic Equipment and Readable Storage Media

The invention provides an inter-process communication method, an electronic device and a readable storage medium. The method includes creating a service thread, creating an asynchronous named pipe handle and overlapping IO, passing the named pipe handle into the Pointer field of overlapping IO, calling the ConnectNamedPipe function, and waiting asynchronously for asynchronous assignment from the client. Transaction, call the GetLastError function to get the current connection state of the named pipe handle; when the current connection state is ERROR_IO_PENDING, store the overlapping IO in the storage space; when the current connection state is ERROR_PIPE_CONNECTED, determine the first client connected to the named pipe handle, and process the corresponding with the first client. Data task, if the current connection state of the named pipe handle is ERROR_IO_PENDING, the overlapping IO is stored in the storage space; the overlapping IO in the storage space is looped through the service thread; if the current overlapping IO processing is completed, the next storage space weight is continued to be processed. Stack IO.

【技术实现步骤摘要】
一种进程间通信方法、电子设备及可读存储介质
本专利技术涉及电子
,尤其涉及一种进程间通信方法、电子设备及可读存储介质。
技术介绍
在Windows系统下,进行进程间通信时,可以采用命名管道NamedPipe的方式来实现。在采用命名管道实现进程间数据传输时,既可以采用异步的方式也可以采用同步的方式。如果采用同步方式,在发送或者接收大数据量的数据时,极有可能会引起上层应用程序的阻塞或者卡顿。而采用异步传输时,由于上层的应用不会等到将所有数据处理完成后才返回,所以利用命名管道进行异步传输时,会起到更好的效果。现有技术在使用命名管道时,大多采用的是一对一的方式,也就是单个进程与单个进程之间进行通信,并没有采用一个进程与多个进程之间进行通信的方式。并且,当命名管道客户端按照时间顺序,一个接着一个的去连接命名管道服务器的时候,这些客户端都能够正常的与服务器建立连接。但是如果大量客户端在同一时刻并发去连接服务器的时候,可能出现大量的客户端连接不上的情况。
技术实现思路
本专利技术实施例提供了一种进程间通信方法、电子设备及可读存储介质,用于解决大量客户端在同一时刻高并发连接命名管道服务器容易连接失败的问题,从而提高命名管道服务器的性能。第一方面,本专利技术提供了一种进程间通信方法,应用于服务器,包括:创建服务线程,所述服务线程用于处理针对客户端的异步任务,所述异步任务包括处理客户端的连接请求、接收客户端发送的数据请求以及向客户端发送数据请求;调用accept函数,通过所述accept函数调用CreateNamedPipe函数创建异步的命名管道句柄和通过所述accept函数创建重叠IO,将所述命名管道句柄传入所述重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的所述异步任务,调用GetLastError函数,获得所述命名管道句柄的当前连接状态;在所述当前连接状态为ERROR_IO_PENDING时,将所述重叠IO存放至与所述异步任务对应的存储空间中,其中,所述服务器中设置有用于存储所述处理客户端的连接请求对应的重叠IO的第一存储空间、用于存储所述接收客户端发送的数据请求对应的重叠IO的第二存储空间以及用于存储所述向客户端发送数据请求对应的重叠IO的第三存储空间;在所述当前连接状态为ERROR_PIPE_CONNECTED时,确定与所述命名管道句柄连接的第一客户端,处理与所述第一客户端对应的数据任务,在所述数据任务处理完成后,如果所述命名管道句柄的当前连接状态为ERROR_IO_PENDING,将所述重叠IO存放至与所述异步任务对应的存储空间中;通过所述服务线程循环查看所述第一存储空间、所述第二存储空间以及所述第三存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。可选的,所述处理与所述第一客户端对应的数据任务,包括:调用onAccepted函数,在所述onAccepted函数中创建目标会话对象,调用所述目标会话对象的asyncReadSome函数,读取所述第一客户端发送的数据。可选的,通过所述accept函数调用CreateNamedPipe函数创建异步的命名管道句柄,包括:通过所述accept函数调用设置了预设安全访问属性的CreateNamedPipe函数创建异步的命名管道句柄,其中,所述命名管道句柄通过所述预设安全访问属性指定访问等级,所述命名管道句柄指定的访问等级使得所述服务器以管理员权限或非管理员权限创建所述命名管道句柄情况下,所述客户端均能访问所述命名管道句柄。可选的,在所述调用accept函数之前,所述方法还包括:初始化安全描述符;将所述安全描述符的安全访问级别设置为最低等级;创建安全属性描述结构,将安全访问级别设置为最低等级的所述安全描述符传入所述安全属性描述结构的属性字段中;将创建的所述安全属性描述结构传入所述CreateNamedPipe函数的安全属性参数中,以使得所述CreateNamedPipe函数的安全属性设置为所述预设安全访问属性。可选的,在所述如果查看到当前重叠IO处理完成之后,所述方法还包括:将所述当前重叠IO从对应的存储空间中删除。可选的,所述如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO,包括:如果所述当前重叠IO为所述第一存储空间中的重叠IO,调用HasOverlappedIoCompleted函数查看所述当前重叠IO,如果所述HasOverlappedIoCompleted函数返回值为“true”,确定有客户端连接到所述服务器;调用onAccepted函数,在所述onAccepted函数中创建第一会话对象,调用所述第一会话对象的asyncReadSome函数,读取所述客户端发送的数据;继续处理下一个存储空间的重叠IO。可选的,所述如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO,包括:如果所述当前重叠IO为所述第二存储空间中的重叠IO,调用HasOverlappedIoCompleted函数查看所述当前重叠IO,如果所述HasOverlappedIoCompleted函数返回值为“true”,确定成功接收到来自客户端发送的数据;通过所述当前重叠IO中Pointer字段获取所述当前重叠IO对应的第二会话对象;调用所述第二会话对象的onReadComplete函数处理接收到的数据;调用所述第二会话对象的asyncReadSome函数,把下一个读取的重叠IO放入到所述第二存储空间;继续处理下一个存储空间的重叠IO。可选的,所述如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO,包括:如果所述当前重叠IO为所述第三存储空间中的重叠IO,定位与所述当前重叠IO对应的第三会话对象;调用所述第三会话对象的asyncWriteSome函数异步的发送数据至客户端;调用HasOverlappedIoCompleted函数查看所述当前重叠IO,如果所述HasOverlappedIoCompleted函数返回值为“true”,确定成功的将数据发送至客户端;继续处理下一个存储空间的重叠IO。第二方面,本专利技术实施例提供一种电子设备,应用于服务器,包括:创建单元,用于创建服务线程,所述服务线程用于处理针对客户端的异步任务,所述异步任务包括处理客户端的连接请求、接收客户端发送的数据请求以及向客户端发送数据请求;调用单元,用于调用accept函数,通过所述accept函数调用设置了预设安全访问属性的CreateNamedPipe函数创建异步的命名管道句柄和通过所述accept函数创建重叠IO,将所述命名管道句柄传入所述重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的所述异步任务;第一处理单元,用于在所述当前连接状态为ERROR_IO_PENDING时,将所述重叠IO存放至与所述异步任务对应的存储空间中,其中,所述服务器中设置有用于存储所述处理客户端的连接请求对应的重叠IO的第一存储空间、用于存储所述接收客户端发送的数据请求对应的重叠IO的第二存储空间以及用于存储所述向客户端发送数据请求对应的重叠IO的第三存储空间;第二处理单元,用于在所述本文档来自技高网...

【技术保护点】
1.一种进程间通信方法,应用于服务器,其特征在于,包括:创建服务线程,所述服务线程用于处理针对客户端的异步任务,所述异步任务包括处理客户端的连接请求、接收客户端发送的数据请求以及向客户端发送数据请求;调用accept函数,通过所述accept函数调用CreateNamedPipe函数创建异步的命名管道句柄和通过所述accept函数创建重叠IO,将所述命名管道句柄传入所述重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的所述异步任务,调用GetLastError函数,获得所述命名管道句柄的当前连接状态;在所述当前连接状态为ERROR_IO_PENDING时,将所述重叠IO存放至与所述异步任务对应的存储空间中,其中,所述服务器中设置有用于存储所述处理客户端的连接请求对应的重叠IO的第一存储空间、用于存储所述接收客户端发送的数据请求对应的重叠IO的第二存储空间以及用于存储所述向客户端发送数据请求对应的重叠IO的第三存储空间;在所述当前连接状态为ERROR_PIPE_CONNECTED时,确定与所述命名管道句柄连接的第一客户端,处理与所述第一客户端对应的数据任务,在所述数据任务处理完成后,如果所述命名管道句柄的当前连接状态为ERROR_IO_PENDING,将所述重叠IO存放至与所述异步任务对应的存储空间中;通过所述服务线程循环查看所述第一存储空间、所述第二存储空间以及所述第三存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。...

【技术特征摘要】
1.一种进程间通信方法,应用于服务器,其特征在于,包括:创建服务线程,所述服务线程用于处理针对客户端的异步任务,所述异步任务包括处理客户端的连接请求、接收客户端发送的数据请求以及向客户端发送数据请求;调用accept函数,通过所述accept函数调用CreateNamedPipe函数创建异步的命名管道句柄和通过所述accept函数创建重叠IO,将所述命名管道句柄传入所述重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的所述异步任务,调用GetLastError函数,获得所述命名管道句柄的当前连接状态;在所述当前连接状态为ERROR_IO_PENDING时,将所述重叠IO存放至与所述异步任务对应的存储空间中,其中,所述服务器中设置有用于存储所述处理客户端的连接请求对应的重叠IO的第一存储空间、用于存储所述接收客户端发送的数据请求对应的重叠IO的第二存储空间以及用于存储所述向客户端发送数据请求对应的重叠IO的第三存储空间;在所述当前连接状态为ERROR_PIPE_CONNECTED时,确定与所述命名管道句柄连接的第一客户端,处理与所述第一客户端对应的数据任务,在所述数据任务处理完成后,如果所述命名管道句柄的当前连接状态为ERROR_IO_PENDING,将所述重叠IO存放至与所述异步任务对应的存储空间中;通过所述服务线程循环查看所述第一存储空间、所述第二存储空间以及所述第三存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。2.如权利要求1所述的方法,其特征在于,所述处理与所述第一客户端对应的数据任务,包括:调用onAccepted函数,在所述onAccepted函数中创建目标会话对象,调用所述目标会话对象的asyncReadSome函数,读取所述第一客户端发送的数据。3.如权利要求1所述的方法,其特征在于,通过所述accept函数调用CreateNamedPipe函数创建异步的命名管道句柄,包括:通过所述accept函数调用设置了预设安全访问属性的CreateNamedPipe函数创建异步的命名管道句柄,其中,所述命名管道句柄通过所述预设安全访问属性指定访问等级,所述命名管道句柄指定的访问等级使得所述服务器以管理员权限或非管理员权限创建所述命名管道句柄情况下,所述客户端均能访问所述命名管道句柄。4.如权利要求3所述的方法,其特征在于,在所述调用accept函数之前,所述方法还包括:初始化安全描述符;将所述安全描述符的安全访问级别设置为最低等级;创建安全属性描述结构,将安全访问级别设置为最低等级的所述安全描述符传入所述安全属性描述结构的属性字段中;将创建的所述安全属性描述结构传入所述CreateNamedPipe函数的安全属性参数中,以使得所述CreateNamedPipe函数的安全属性设置为所述预设安全访问属性。5.如权利要求1所述的方法,其特征在于,所述如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO,包括:如果所述当前重叠IO为所述第一存储空间中的重叠IO,调用HasOverlappedIoCompleted函数查看所述当前重叠IO,如果所述HasOverlappedIoCompleted函数返回值为“true”,确定有客户端连接到所述服务器;调用onAccepted函数,在所述onAccepted函数中创建第一会话对象,调用所述第一会话对象的asyncReadSome...

【专利技术属性】
技术研发人员:杨亮陈少杰张文明
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1