阻塞式异步监听多客户指令并控制多硬件的服务端架构制造技术

技术编号:39668194 阅读:7 留言:0更新日期:2023-12-11 18:32
本发明专利技术公开了阻塞式异步监听多客户指令并控制多硬件的服务端架构

【技术实现步骤摘要】
阻塞式异步监听多客户指令并控制多硬件的服务端架构、通信系统及方法


[0001]本专利技术涉及通信
,尤其涉及阻塞式异步监听多客户指令并控制多硬件的服务端架构

通信系统及方法


技术介绍

[0002]在航空电子
、5G
射频等通信领域,存在大量需要通过
C/S
体系网络并发控制一个或多个硬件设备的通信需求,其中客户一般使用上位机界面的客户端程序发出控制指令,然后通过搭载服务端程序的服务端设备解析指令并通过使用驱动文件描述符控制具体的受控硬件设备

[0003]传统的多路
IO
复用服务端架构,在接收到多客户请求时,通常为每个客户分配单独的进程来处理,这种处理方式理论上操作简单,但是实际中的设备资源开销很大,而作为通信服务端使用的嵌入式主控设备内存资源非常紧张,对于运行的服务端程序有着严苛的轻量级要求

中国专利公开号
CN113553199A
,公开日为
2021

10

26
日,名称为“一种使用异步非阻塞模式处理多客户端接入的方法及装置”公开了一种处理多客户端接入的方法,包括主用工作组主用线程及线程池模块

辅助工作组工作线程及线程池模块

多路服务器和负载均衡模块,通过使用异步非阻塞模式,能够在一定程度上解决多客户端同时接入请求,然而此专利使用的是非阻塞式设计,在无客户请求时线程不能进入完全休眠的状态,会持续占用处理器和系统内存资源


技术实现思路

[0004]本专利技术克服了现有的多客户通信服务端架构不够轻量级,在无客户连接请求和客户指令时持续占用内存和处理器资源等问题,提供了阻塞式异步监听多客户指令并控制多硬件的服务端架构

通信系统及方法,其中服务端架构采用异步阻塞式监听及接收客户指令的架构设计,通过创建使用无名管道和全局结构数组的方式,此架构所有线程空闲时均处于阻塞态,让出所占用的内存和处理器资源,并且在接收到客户请求时能快速唤醒接收客户指令,并通过硬件控制模块可并发地执行指令,所有线程共用一个进程就能实现多客户同时接入控制硬件设备的功能,该架构能同时满足嵌入式通信系统对多客户服务端架构轻量级

内存资源开销少

请求响应速度快

及时释放处理器资源等方面的需求

[0005]为了实现上述目的,本专利技术采用以下方案:阻塞式异步监听多客户指令并控制多硬件的服务端架构,包括网络交互模块和硬件控制模块,其中:所述网络交互模块包括:全局结构数组,其元素结构成员包括已连接客户的套接字和客户信息,所述套接字为阻塞套接字;无名管道,其包括读端口和写端口;
客户连接监听线程,创建阻塞监听套接字
sock
,然后调用
accept(sock, ...)
阻塞监听新客户的连接请求,在无新客户连接时阻塞等待,在有新客户请求连接时被唤醒并返回新客户的套接字,保存已连接客户的套接字和客户信息到全局结构数组中,并向无名管道的写端口写入任意数据使其读端口转换为可读状态,然后再次调用
accept
函数继续阻塞监听等待其它客户的连接请求;客户指令解析线程,其定义一个
fd_set
类型的空文件集
fdSet
,把无名管道的读端口和全局结构数组中的所有套接字依次加入文件集
fdSet
中,然后调用函数
select
监视文件集
fdSet
中是否有文件更新为可读状态,客户指令解析线程在未接收到客户连接请求或客户指令时阻塞于函数
select
调用处,出现以下情况时被唤醒并执行操作:因出现系统异常情况被唤醒,根据异常返回值和实际异常情况进行对应的异常处理;因无名管道读端口或客户的套接字变为可读状态被唤醒,函数
select
对文件集
fdSet
中的文件进行筛选并只保留其中的可读文件,先确认无名管道的读端口是否仍在文件集
fdSet
中,若是则清空无名管道的读端口使其恢复不可读状态,否则逐个确认全局结构数组中各客户套接字是否仍在文件集
fdSet
中,读取仍在文件集
fdSet
中的套接字接收的指令内容并解析后进行缓存,解析指令的结果包括指令指定的受控设备及控制方式;随后清空文件集
fdSet
并将无名管道的读端口和全局结构数组中的所有套接字重新加入文件集
fdSet
中,然后再次调用函数
select
对文件集
fdSet
进行下一轮监视以等待其中出现新的可读文件;所述硬件控制模块包括:并发指令队列和顺序指令队列,均用于对解析完成的指令进行分类缓存,若指令涉及对临界资源的访问则缓存至所述顺序指令队列,否则缓存至所述并发指令队列;并发执行线程,其按先进先出的方式读取所述并发指令队列中的指令,并通过调用对应受控硬件驱动接口并发控制受控硬件;顺序执行线程,其按先进先出的方式读取所述顺序指令队列中的指令,通过调用对应受控硬件驱动接口顺序控制受控硬件,顺序指令队列中每条指令的执行均等待上一条指令执行结束后开始;所述客户连接监听线程

客户指令解析线程

并发执行线程和顺序执行线程各线程隶属于同一进程且异步并发运行

[0006]作为优选,所述客户连接监听线程

客户指令解析线程

并发执行线程和顺序执行线程的线程属性均设置为
PTHREAD_CANCEL_ASYNCHRONOUS
,其中任一线程运行出错时调用函数
pthread_cancel

pthread_join
中止其它所有线程的运行并回收线程资源

[0007]作为优选,所述网络交互模块对系统的
SIGPIPE、SIGQUIT、SIGINT
信号提前进行屏蔽

[0008]作为优选,所述客户指令解析线程读取客户指令使用函数
read、recv

recvfrom
,并将缓冲区容量作为读取长度参数传入函数中,对客户套接字的写入使用函数
write、send

sendto
;若调用读写函数的返回值小于等于0,则跳过对此客户的读写并关闭此套接字,然后从全局结构数组中找到并清空该客户对应的元素结构信息,然后继续监视和处理其它客户的套接字

[0009]作为优选,架构包括对全局结构数组中客户套接字的读写保护机制,其采用与各套接字一一对应的文件锁,将客户套接字的读写操作放在
lockf(socket, F_LOCK, 0)
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
阻塞式异步监听多客户指令并控制多硬件的服务端架构,其特征在于,包括网络交互模块和硬件控制模块,其中:所述网络交互模块包括:全局结构数组,其元素结构成员包括已连接客户的套接字和客户信息,所述套接字为阻塞套接字;无名管道,其包括读端口和写端口;客户连接监听线程,其创建阻塞监听套接字
sock
,然后调用
accept(sock, ...)
阻塞监听新客户的连接请求,在无新客户连接时阻塞等待,在有新客户请求连接时被唤醒并返回新客户的套接字,保存已连接客户的套接字和客户信息到全局结构数组中,并向所述无名管道的写端口写入任意数据使其读端口转换为可读状态,然后再次调用
accept
函数继续阻塞监听等待其它客户的连接请求;客户指令解析线程,其定义一个
fd_set
类型的空文件集
fdSet
,把无名管道的读端口和全局结构数组中的所有套接字依次加入文件集
fdSet
中,然后调用函数
select
监视文件集
fdSet
中是否有文件更新为可读状态,客户指令解析线程在未接收到客户连接请求或客户指令时阻塞于函数
select
调用处,出现以下情况时被唤醒并执行操作:因出现系统异常情况被唤醒,根据异常返回值和实际异常情况进行对应的异常处理;因无名管道读端口或客户的套接字变为可读状态被唤醒,函数
select
对文件集
fdSet
中的文件进行筛选并只保留其中的可读文件,先确认无名管道的读端口是否仍在文件集
fdSet
中,若是则清空无名管道的读端口使其恢复不可读状态,否则逐个确认全局结构数组中各客户套接字是否仍在文件集
fdSet
中,读取仍在文件集
fdSet
中的套接字接收的指令内容并解析后进行缓存,解析指令的结果包括指令指定的受控设备及控制方式;随后清空文件集
fdSet
并将无名管道的读端口和全局结构数组中的所有套接字重新加入文件集
fdSet
中,然后再次调用函数
select
对文件集
fdSet
进行下一轮监视以等待其中出现新的可读文件;所述硬件控制模块包括:并发指令队列和顺序指令队列,均用于对解析完成的指令进行分类缓存,若指令涉及对临界资源的访问则缓存至所述顺序指令队列,否则缓存至所述并发指令队列;并发执行线程,其按先进先出的方式读取所述并发指令队列中的指令,并通过调用对应受控硬件驱动接口并发控制受控硬件;顺序执行线程,其按先进先出的方式读取所述顺序指令队列中的指令,通过调用对应受控硬件驱动接口顺序控制受控硬件,顺序指令队列中每条指令的执行均等待上一条指令执行结束后开始;所述客户连接监听线程

客户指令解析线程

并发执行线程和顺序执行线程各线程隶属于同一进程且异步并发运行
。2.
根据权利要求1所述的阻塞式异步监听多客户指令并控制多硬件的服务端架构,其特征在于,所述客户连接监听线程

客户指令解析线程

并发执行线程和顺序执行线程的线程属性均设置为
PTHREAD_CANCEL_ASYNCHRONOUS
,其中任一线程运行出错时调用函数
pthread_cancel

pthread_join
中止其它所有线程的运行并回收线程资源
。3.
根据权利要求1所述的阻塞式异步监听多客户指令并控制多硬件的服务端架构,其
特征在于,所述网络交互模块对系统的
SIGPIPE、SIGQUIT、SIGINT
信号提前进行屏蔽
。4.
根据权利要求1所述的阻塞式异步监听多客户指令并控制多硬件的服务端架构,其特征在于,所述客户指令解析线程读取客户指令使用函数
read、recv

recvfrom
,并将缓冲区容量作为读取长度参数传入函数中,对客户套接字的写入使用函数
write、send

sendto
;若调用读写函数的返回值小于等于0,则跳过对此客户的读写并关闭此套接字,然后从全局结构数组中找到并清空该客户对应的元素结构信息,然后继续监视和处理其它客户的套接字
。5.
根据权利要求1所述的阻塞式异步监听多客户指令并控制多硬件的服务端架构,其特征在于,包括对全局结构数组中客户套接字的读写保护机制,其采用与各套接字一一对应的文件锁,将客户套接字的读写操作放在
lockf(socket, F_LOCK, 0)

lockf(socket, F_UNLOCK, 0)
之间形成的临界区,其中
socket
为被保护的套接字
。6.
根据权利要求1所述的阻塞式异步监听多客户指令并控制多硬件的服务端架构,其特征在于,所述网络交互模块创建有用于指示已连接客户数量的信号量
sem_connectClt
,所述信号量
sem_connectC...

【专利技术属性】
技术研发人员:李泽龙叶亚飞潘旭强
申请(专利权)人:北京力通通信有限公司
类型:发明
国别省市:

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

1