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

技术编号:19489128 阅读:111 留言:0更新日期:2018-11-17 12:03
本发明专利技术提供了一种进程间通信方法、电子设备及可读存储介质,用于提供一种利用Windows的命名管道实现一个服务器进程与多个客户端进程之间进行异步数据通信的方法。该方法包括:创建服务线程;调用accept函数,创建重叠IO和调用设置了预设安全访问属性的CreateNamedPipe函数创建异步的命名管道句柄,将命名管道句柄传入重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的异步任务,将重叠IO存放至与异步任务对应的存储空间中;通过服务线程循环查看第一存储空间、第二存储空间以及第三存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。

【技术实现步骤摘要】
一种进程间通信方法、电子设备及可读存储介质
本专利技术涉及电子
,尤其涉及一种进程间通信方法、电子设备及可读存储介质。
技术介绍
在Windows系统下,进行进程间通信时,可以采用命名管道NamedPipe的方式来实现。在采用命名管道实现进程间数据传输时,既可以采用异步的方式也可以采用同步的方式。如果采用同步方式,在发送或者接收大数据量的数据时,极有可能会引起上层应用程序的阻塞或者卡顿。而采用异步传输时,由于上层的应用不会等到将所有数据处理完成后才返回,所以利用命名管道进行异步传输时,会起到更好的效果。现有技术在使用命名管道时,大多采用的是一对一的方式,也就是单个进程与单个进程之间进行通信,并没有采用一个进程与多个进程之间进行通信的方式。并且,Windows系统上的命名管道是一种系统资源,设置有相关的访问权限。当服务器进程以管理员权限启动并使用默认的安全方式创建了一个命名管道后,如果客户端以非管理员权限打开服务器端创建的命名管道,那么客户端就会因为权限不够,从而连不上命名管道服务器,导致服务器与客户端间的通信连接异常。
技术实现思路
本专利技术实施例提供了一种进程间通信方法、电子设备及可读存储介质,用于提供一种利用Windows的命名管道实现一个服务器进程与多个客户端进程之间进行异步数据通信的方法,并通过创建最低安全访问级别的命名管道句柄,使得客户端均能访问该命名管道句柄与服务器进行通信。第一方面,本专利技术提供了一种进程间通信方法,应用于服务器,包括:创建服务线程,所述服务线程用于处理针对客户端的异步任务,所述异步任务包括处理客户端的连接请求、接收客户端发送的数据请求以及向客户端发送数据请求;调用accept函数,通过所述accept函数调用设置了预设安全访问属性的CreateNamedPipe函数创建异步的命名管道句柄和通过所述accept函数创建重叠IO,将所述命名管道句柄传入所述重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的所述异步任务,将所述重叠IO存放至与所述异步任务对应的存储空间中,其中,所述命名管道句柄通过所述预设安全访问属性指定访问等级,所述命名管道句柄指定的访问等级使得所述服务器以管理员权限或非管理员权限创建所述命名管道句柄情况下,所述客户端均能访问所述命名管道句柄,所述服务器中设置有用于存储所述处理客户端的连接请求对应的重叠IO的第一存储空间、用于存储所述接收客户端发送的数据请求对应的重叠IO的第二存储空间以及用于存储所述向客户端发送数据请求对应的重叠IO的第三存储空间;通过所述服务线程循环查看所述第一存储空间、所述第二存储空间以及所述第三存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。可选的,在所述调用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函数,异步等待来自客户端的所述异步任务,将所述重叠IO存放至与所述异步任务对应的存储空间中,其中,所述命名管道句柄通过所述预设安全访问属性指定访问等级,所述命名管道句柄指定的访问等级使得所述服务器以管理员权限或非管理员权限创建所述命名管道句柄情况下,所述客户端均能访问所述命名管道句柄,所述服务器中设置有用于存储所述处理客户端的连接请求对应的重叠IO的第一存储空间、用于存储所述接收客户端发送的数据请求对应的重叠IO的第二存储空间以及用于存储所述向客户端发送数据请求对应的重叠IO的第三存储空间;处理单元,用于通过所述服务线程循环查看所述第一存储空间、所述第二存储空间以及所述第三存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。可选的,所述电子设备还包括:安全访问属性设置单元,用于初始化安全描述符,将所述安全描述符的安全访问级别设置为最低等级,创建安全属性描述结构,将安全访问级别设置为最低等级的所述安全描述符传入所述安全属性描述结构的属性字段中,将创建的所述安全属性描述结构传入所述CreateNamedPipe函数的安全属性参数中,以使得所述CreateNamedPipe函数的安全属性设置为所述预设安全访问属性本文档来自技高网...

【技术保护点】
1.一种进程间通信方法,应用于服务器,其特征在于,包括:创建服务线程,所述服务线程用于处理针对客户端的异步任务,所述异步任务包括处理客户端的连接请求、接收客户端发送的数据请求以及向客户端发送数据请求;调用accept函数,通过所述accept函数调用设置了预设安全访问属性的CreateNamedPipe函数创建异步的命名管道句柄和通过所述accept函数创建重叠IO,将所述命名管道句柄传入所述重叠IO的Pointer字段中,调用ConnectNamedPipe函数,异步等待来自客户端的所述异步任务,将所述重叠IO存放至与所述异步任务对应的存储空间中,其中,所述命名管道句柄通过所述预设安全访问属性指定访问等级,所述命名管道句柄指定的访问等级使得所述服务器以管理员权限或非管理员权限创建所述命名管道句柄情况下,所述客户端均能访问所述命名管道句柄,所述服务器中设置有用于存储所述处理客户端的连接请求对应的重叠IO的第一存储空间、用于存储所述接收客户端发送的数据请求对应的重叠IO的第二存储空间以及用于存储所述向客户端发送数据请求对应的重叠IO的第三存储空间;通过所述服务线程循环查看所述第一存储空间、所述第二存储空间以及所述第三存储空间中的重叠IO,如果查看到当前重叠IO处理完成,继续处理下一个存储空间的重叠IO。...

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

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

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

1