阻塞式异步监听多客户指令并控制多硬件的服务端架构、通信系统及方法与流程

文档序号:36321388发布日期:2023-12-08 22:03阅读:28来源:国知局
阻塞式异步监听多客户指令并控制多硬件的服务端架构的制作方法

本发明涉及通信,尤其涉及阻塞式异步监听多客户指令并控制多硬件的服务端架构、通信系统及方法。


背景技术:

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

2、传统的多路io复用服务端架构,在接收到多客户请求时,通常为每个客户分配单独的进程来处理,这种处理方式理论上操作简单,但是实际中的设备资源开销很大,而作为通信服务端使用的嵌入式主控设备内存资源非常紧张,对于运行的服务端程序有着严苛的轻量级要求。中国专利公开号cn113553199a,公开日为2021年10月26日,名称为“一种使用异步非阻塞模式处理多客户端接入的方法及装置”公开了一种处理多客户端接入的方法,包括主用工作组主用线程及线程池模块、辅助工作组工作线程及线程池模块、多路服务器和负载均衡模块,通过使用异步非阻塞模式,能够在一定程度上解决多客户端同时接入请求,然而此专利使用的是非阻塞式设计,在无客户请求时线程不能进入完全休眠的状态,会持续占用处理器和系统内存资源。


技术实现思路

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

2、为了实现上述目的,本发明采用以下方案:

3、阻塞式异步监听多客户指令并控制多硬件的服务端架构,包括网络交互模块和硬件控制模块,其中:

4、所述网络交互模块包括:

5、全局结构数组,其元素结构成员包括已连接客户的套接字和客户信息,所述套接字为阻塞套接字;

6、无名管道,其包括读端口和写端口;

7、客户连接监听线程,创建阻塞监听套接字sock,然后调用accept(sock, ...)阻塞监听新客户的连接请求,在无新客户连接时阻塞等待,在有新客户请求连接时被唤醒并返回新客户的套接字,保存已连接客户的套接字和客户信息到全局结构数组中,并向无名管道的写端口写入任意数据使其读端口转换为可读状态,然后再次调用accept函数继续阻塞监听等待其它客户的连接请求;

8、客户指令解析线程,其定义一个fd_set类型的空文件集fdset,把无名管道的读端口和全局结构数组中的所有套接字依次加入文件集fdset中,然后调用函数select监视文件集fdset中是否有文件更新为可读状态,客户指令解析线程在未接收到客户连接请求或客户指令时阻塞于函数select调用处,出现以下情况时被唤醒并执行操作:

9、因出现系统异常情况被唤醒,根据异常返回值和实际异常情况进行对应的异常处理;

10、因无名管道读端口或客户的套接字变为可读状态被唤醒,函数select对文件集fdset中的文件进行筛选并只保留其中的可读文件,先确认无名管道的读端口是否仍在文件集fdset中,若是则清空无名管道的读端口使其恢复不可读状态,否则逐个确认全局结构数组中各客户套接字是否仍在文件集fdset中,读取仍在文件集fdset中的套接字接收的指令内容并解析后进行缓存,解析指令的结果包括指令指定的受控设备及控制方式;随后清空文件集fdset并将无名管道的读端口和全局结构数组中的所有套接字重新加入文件集fdset中,然后再次调用函数select对文件集fdset进行下一轮监视以等待其中出现新的可读文件;

11、所述硬件控制模块包括:

12、并发指令队列和顺序指令队列,均用于对解析完成的指令进行分类缓存,若指令涉及对临界资源的访问则缓存至所述顺序指令队列,否则缓存至所述并发指令队列;

13、并发执行线程,其按先进先出的方式读取所述并发指令队列中的指令,并通过调用对应受控硬件驱动接口并发控制受控硬件;

14、顺序执行线程,其按先进先出的方式读取所述顺序指令队列中的指令,通过调用对应受控硬件驱动接口顺序控制受控硬件,顺序指令队列中每条指令的执行均等待上一条指令执行结束后开始;

15、所述客户连接监听线程、客户指令解析线程、并发执行线程和顺序执行线程各线程隶属于同一进程且异步并发运行。

16、作为优选,所述客户连接监听线程、客户指令解析线程、并发执行线程和顺序执行线程的线程属性均设置为pthread_cancel_asynchronous,其中任一线程运行出错时调用函数pthread_cancel和pthread_join中止其它所有线程的运行并回收线程资源。

17、作为优选,所述网络交互模块对系统的sigpipe、sigquit、sigint信号提前进行屏蔽。

18、作为优选,所述客户指令解析线程读取客户指令使用函数read、recv或recvfrom,并将缓冲区容量作为读取长度参数传入函数中,对客户套接字的写入使用函数write、send或sendto;若调用读写函数的返回值小于等于0,则跳过对此客户的读写并关闭此套接字,然后从全局结构数组中找到并清空该客户对应的元素结构信息,然后继续监视和处理其它客户的套接字。

19、作为优选,架构包括对全局结构数组中客户套接字的读写保护机制,其采用与各套接字一一对应的文件锁,将客户套接字的读写操作放在lockf(socket, f_lock, 0)和lockf(socket, f_unlock, 0)之间形成的临界区,其中socket为被保护的套接字。

20、作为优选,所述网络交互模块创建有用于指示已连接客户数量的信号量sem_connectclt,所述信号量sem_connectclt初值为0,在监听到一个新客户连接请求并建立连接后对信号量sem_connectclt进行一次v操作,在接收到一个已连接客户的退出指令后对信号量sem_connectclt进行一次p操作并关闭该客户套接字以及清空全局结构数组中的该客户的元素结构成员信息,所述客户指令解析线程在读取完所有客户指令后对信号量sem_connectclt进行一次p操作,当信号量sem_connectclt的值小于0时客户指令解析线程进入阻塞状态,线程被唤醒后对信号量sem_connectclt先额外进行一次v操作。

21、作为优选,所述的阻塞式异步监听多客户指令并控制多硬件的服务端架构,其特征在于,将对全局结构数组的元素的读取或修改操作均在信号量或互斥锁所形成的临界区中完成。

22、作为优选,所述硬件控制模块还创建有初值均为0的信号量b和信号量s,所述信号量b和信号量s分别用于指示当前并发指令队列和顺序指令队列中的指令数,客户指令解析线程每往并发指令队列缓存一条解析完成的指令后对信号量b进行一次v操作,每往顺序指令队列缓存一条解析完成的指令后对信号量s进行一次v操作,并发执行线程每从并发指令队列中读取一条指令前对信号量b进行一次p操作,顺序执行线程每从顺序指令队列中读取一条指令前对信号量s进行一次p操作。

23、本技术还提供阻塞式异步监听多客户指令并控制多硬件的通信系统,包括:

24、用户上位机,其包括多个具有网络通信功能的客户端设备,通过网络发送用户指令;

25、受控硬件,其提供硬件驱动接口和驱动模块,用于完成对应的硬件操作;

26、嵌入式主控网络设备,其架构设计采用以上方案或优选方案中任一项所提供的阻塞式异步监听多客户指令并控制多硬件的服务端架构,所述嵌入式主控网络设备运行有服务端程序,与所述受控硬件连接并加载有所述驱动模块,所述服务端程序用于接收和解析所述用户上位机发出的指令得到硬件控制信息,并根据硬件控制信息调用对应硬件驱动接口和驱动模块使受控硬件完成对应的硬件操作。

27、本技术还提供阻塞式异步监听多客户指令并控制多硬件的方法,基于以上方案或优选方案中任一项所提供的阻塞式异步监听多客户指令并控制多硬件的服务端架构,方法包括以下步骤:

28、s1:定义用于保存客户信息和已连接客户的阻塞套接字的全局结构数组,客户连接监听线程创建阻塞监听套接字sock;客户指令解析线程创建fd_set类型的文件集fdset,创建无名管道,所述无名管道包括读端口pipe[0]和写端口pipe[1];

29、s2:客户连接监听线程调用函数accept阻塞等待新客户的连接请求;客户指令解析线程统计全局结构数组中的套接字和pipe[0]一起加入文件集fdset中,然后调用函数select阻塞等待文件集fdset中更新可读文件;并发执行线程和顺序执行线程分别阻塞等待并发指令队列和顺序指令队列中存入指令;

30、s3:接收到新客户的连接请求时,客户连接监听线程被唤醒,将accept函数返回的新客户的套接字和客户信息更新到全局结构数组中,并向无名管道的写端口pipe[1]写入任意字符使文件集fdset中的无名管道读端口pipe[0]变为可读状态;接收到已连接的客户通过套接字发送的指令时对应套接字变为可读状态;

31、s4:客户指令解析线程被唤醒,函数select从文件集fdset中筛选并只保留其中的可读文件,确认无名管道读端口pipe[0]是否仍在被筛选后的可读文件集fdset中,若是则清空无名管道的读端口pipe[0]并返回到步骤s2,否则逐个确认全局结构数组中的各客户套接字是否在可读文件集fdset中,并读取和解析仍在可读文件集fdset中的套接字的指令内容,将不涉及临界资源的指令缓存至并发指令队列,唤醒并发执行线程读取并执行并发指令队列中的指令,将涉及临界资源的指令缓存至顺序指令队列,唤醒顺序执行线程读取并执行顺序指令队列中的指令;当所有指令均已缓存至指令队列时返回步骤s2。

32、本发明至少包括以下有益效果:(1)采用单进程的结构设计,不占用过多内存资源,足够轻量级;(2)所有线程在空闲时均处于阻塞态,不持续占用cpu,以提高通信系统和通信设备的整体运行效率;(3)区分了客户指令是否涉及临界资源的访问,通过设置顺序指令队列或和并发指令队列,既避免了对同一临界硬件资源的同时访问产生的竞态问题,又保证了指令执行的顺序与接收顺序一致;(4)各线程和任务的运行、阻塞、或中止均是异步并发的,既不会互相干扰,出错时也能顺利回收处于阻塞态的线程资源;(5)通过设置文件锁,保证了轻量级和代码可重入性的同时,实现了对同一个客户套接字的访问互斥;(6)在实现在监听多客户指令的同时,可完成对多个硬件设备的灵活控制,对嵌入式通信有很强的适配性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1