一种lxi仪器的服务监听方法

文档序号:7551159阅读:149来源:国知局

专利名称::一种lxi仪器的服务监听方法
技术领域
:本发明属于ー种仪器网络服务监听方法,涉及LXI仪器开发领域。
背景技术
:在LXI仪器中,服务管理器主要对具有独立的网络端ロ,需要与用户进行交互,建立主从式网络连接的服务进行管理。其主要任务是为这些服务提供与用户建立网络连接的前期准备工作,并一直监听所有服务端ロ的状态,当有服务请求到来时,服务管理器为该端ロ创建ー个新的服务进程对用户进行服务,而服务管理器仍然保持对该服务端ロ的监听,以便为后续的用户请求服务。服务管理器由两部分組成,一部分是服务监听程序,用来监听所有服务端ロ的状态,当有用户请求到来时,将会根据请求启动对应的服务进程,另一部分是服务进程,用来处理用户的服务请求,向用户提供相应的仪器功能,服务进程由服务监听进程启动,根据用户的终止服务请求而退出。仪器中的服务程序与用户应用程序之间是通过TCP/IP协议进行通信的,LXI仪器作为服务器端,将接收多个不同客户端的服务请求,所以解决单服务器对多用户请求的处理是关键。在以往的面向网络的服务提供方式中,通常采用如下几种方法:(I)循环服务:循环服务器指的是对于客户端的请求连接,处理器在处理完毕ー个服务请求之后再处理另ー个,即进行串行处理客户端的请求。它可以循环处理多个客户端的请求,但每次只能处理ー个客户端的请求,效率较低。(2)并发服务器:并发服务器有很多种,最简单的并发服务器就是预先创建多个进程,当客户请求到来时,系统从进程池中取出ー个进程处理客户端的连接。按照acc印t分类的多进程和多线程并发服务器包括:①单客户端单进程,同一accept;与简单并发服务器不同,该服务器并不预先创建进程,而是由主进程统一处理客户端的连接请求,当客户端的请求到来时,才临时fork进程,由子进程处理客户端的请求。其工作模型如图2。②单客户端单线程,同一accept;与进程相比,线程有很多优点,比如速度快、占用资源少、数据可以共享等。在这种服务器模型中,其工作模型与单客户单进程,同一acc印t的模型是ー样的,只不过在需要创建进程的地方换成创建线程。③单客户端单线程,各线程独自accept,使用互斥锁;该服务与之前的并发服务器相似,多个线程分别调用acc印t函数处理客户端的连接。为了防止冲突,使用了线程互斥锁。在调用函数之前锁定,调用函数acc印t以后释放,其工作模型如图3。(3)I/O复用循环服务器:并发服务器存在的ー个问题是,它需要建立多个并行的处理单元,当用户服务请求增加时,随着处理单元的増加,系统的负载会逐渐转移到并行单元之间的切換,为了降低这些不必要的开支,出现了新型的I/o复用循环服务器。这种服务器模型,在系统开始工作吋,创建多个不同工作类型的处理单元,如处理连接的单元和处理业务的单元等。在客户端连接到来时,将客户的连接放到一个状态池中,对所有客户端的连接状态在ー个处理単元中进行轮询处理。与前面的并发服务器相比,客户端的增加不会造成系统并行处理单元的増加,而处理能力与CPU和内存的速度直接相关。其工作模型如图4。以上所述的各种方法虽然已经很成熟,但它们的适用范围有限,而且上述的方法都是针对同一端ロ提供的服务,而对于多个端ロ的服务并不适用。如果将LXI仪器的服务设计成并发服务器,会存在如下问题:(I)所述服务器均需要有ー个独立进程与之对应,由于这些进程与系统同时运行,所以会占用进程表中的表项,但它们不需要同时工作,因此造成对系统资源的浪费;(2)所述服务进程都有相同的启动过程,当服务程序过多时,这些操作过程的启动代码变得繁多而冗余,需要更多的存储和运行空间;(3)在増加服务进程时,开发者需要掌握服务的处理过程外,还要掌握网络编程知识,这样会降低开发效率。
发明内容本发明为了解决现有服务方法由于设计成并发服务的方式会存在(I)不工作的进程仍然占用进程表的表项和系统资源,造成服务器内部资源浪费,(2)相同的启动过程重复进行,需要更多的存储和运行空间的问题,从而提供ー种LXI仪器的服务监听方法。ー种LXI仪器的服务监听方法,它包括监听过程A和服务进程B:所述监听过程A包括如下步骤:所述监听过程A包括如下步骤:Al:用于监听服务请求的准备步骤;A2:用于读取配置文件,并根据配置文件创建套接字描述符的步骤:读取配置文件,解析以获取各服务请求的属性,并根据解析结果为各服务请求创建相应的套接字描述符;A3:用于将套接字描述符添加到ー个描述符集的步骤;A4:用于将请求服务的端口号和通配IP地址绑定到对应服务器的套接字接ロ的步骤;A5:用于由所述套接字接ロ调用listen接收服务请求的步骤;A6:用于调用select扫描的步骤,对步骤A3所述描述符集进行扫描,获得可读描述符集的等待标志;当可读描述符集的等待标志为nowait时,贝U进入步骤A71;当可读描述符集的等待标志为wait时,则进入步骤A72;A71:用于调用acc印t接收,然后调用fork创建子进程的步骤,其中父进程用于关闭acc印t返回的套接字并返回到步骤A6,子进程用于仅保留acc印t返回的套接字,关闭其余套接字的进程,然后进入步骤AS;A72:用于调用fork创建子进程的步骤;其中父进程用于关闭acc印t返回的套接字并返回到步骤A6调用select扫描的进程步骤,子进程用于仅保留acc印t返回的套接字,关闭其余套接字的进程,主进程将步骤A6中所述等待标志为wait的套接字描述符移除描述符集,并等待子进程结束后将该套接字描述符添加到描述符集中返回步骤A6;AS:用于将子进程转换为守护进程的步骤,所述步骤使空设备具有标准输入流stdin描述符0,标准输出流stdout描述符I和标准错误流stderr描述符2;A9:用于调用exec执行服务所对应的服务进程的步骤;所述服务进程B包括如下步骤:B1:用于获取步骤A9所述服务进程信息的步骤;B2:用于调用read从描述符0读入请求服务端发送的指令的步骤;B3:用于调用服务进程的驱动库执行指令的步骤;B4:用于调用write向描述符I写入执行结果信息的步骤;B5:用于关闭描述符,退出的步骤。本发明所述的ー种LXI仪器的服务监听方法,采用I/O复用循环服务器和单客户端单进程,同一acc印t的并发服务器的思想相结合,将所有服务程序的准备工作和监听エ作统一到一个进程中,而具体的服务处理函数由监听程序来启动:(I)使不需要工作的服务项不被启动,避免了服务进程占用进程表,造成服务器内部资源浪费;(2)由监听程序来启动具体的服务处理函数,简化了重复的启动过程,减少存储和运行空间,使运行速度更快捷,用户等待时间減少,缩短不同测试功能的切换时间,提高测试速度和工作效率。图1是本发明所述的ー种LXI仪器的服务监听方法的原理框图;图2是
背景技术
所述的单客户端单进程同一accept的工作模型图;图3是
背景技术
所述的单客户端单线程各线程独自acc印t使用互斥锁的工作模型;图4是
背景技术
所述的I/O复用循环服务器的工作模型。具体实施例方式具体实施方式一、结合图1说明本具体实施方式。ー种LXI仪器的服务监听方法,它包括监听过程A和服务进程B:所述监听过程A包括如下步骤:Al:用于监听服务请求的准备步骤;A2:用于读取配置文件,并根据配置文件创建套接字描述符的步骤:读取配置文件,解析以获取各服务请求的属性,并根据解析结果为各服务请求创建相应的套接字描述符;A3:用于将套接字描述符添加到ー个描述符集的步骤;A4:用于将请求服务的端口号和通配IP地址绑定到对应服务器的套接字接ロ的步骤;A5:用于由所述套接字接ロ调用listen接受服务请求的步骤;A6:用于调用select扫描的步骤,对步骤A3所述描述符集进行扫描,获得可读描述符集的等待标志;当可读描述符集的等待标志为nowait时,则进入步骤A71;当可读描述符集的等待标志为wait时,则进入步骤A72;A71:用于调用acc印t接收,然后调用fork创建子进程的步骤,其中父进程用于关闭acc印t返回的套接字并返回到步骤A6,子进程用于仅保留acc印t返回的套接字,关闭其余套接字的进程,然后进入步骤AS;A72:用于调用fork创建子进程的步骤;其中父进程用于关闭acc印t返回的套接字并返回到步骤A6调用select扫描的进程步骤,子进程用于仅保留acc印t返回的套接字,关闭其余套接字的进程,主进程将步骤A6中所述等待标志为wait的套接字描述符移除描述符集,并等待子进程结束后将该套接字描述符添加到描述符集中返回步骤A6;AS:用于将子进程转换为守护进程的步骤,所述步骤使空设备具有标准输入流stdin描述符0,标准输出流stdout描述符I和标准错误流stderr描述符2;所述空设备为/dev/null设备。A9:用于调用exec执行服务所对应的服务进程的步骤;所述服务进程B包括如下步骤:B1:用于获取步骤A9所述服务进程信息的步骤;B2:用于调用read从描述符0读入请求服务端发送的指令的步骤;B3:用于调用服务进程的驱动库执行指令的步骤;B4:用于调用write向描述符I写入执行结果信息的步骤;B5:用于关闭描述符,退出的步骤。采用本具体实施方式中步骤A2“用于读取配置文件,并根据配置文件创建套接字描述符的步骤:读取配置文件,解析以获取各服务请求的属性,并根据解析结果为各服务请求创建相应的套接字描述符”的解析配置文件对服务请求的定义包括以下字段:服务名、套接字类型、协议名、端口号、等待标志、服务程序名称和服务程序启动參数。本发明中配置文件为/etc/lxiservices.conf,其内容如下:Pservice:socket-type:protocol:port:wait-flag:prpgram:programargumentss1tO:stream:tcp:17770:nowait:/bin/slotO:slotOslot1:stream:tcp:17771:nowait:/bin/slot1:slotIIx1:stream:tcp:17772:nowait:/bin/lx1:1xilanmsg:dgram:udp:5044:wait:/bin/lanmsg:lanmsg配置文件解析结果包括全局变量结构体、服务属性结构体和解析文件结构体,其中:全局变量结构体:■rlim_ofile_cur和rlim_file提供了关于该进程资源限制的定义;■serv_table,是所有服务构成的链表的头指针;■concurrency,支持的并发服务数量;■allsock,是供select选择的描述符集;■cur_maxsock和old_maxsock,定义allsock中描述符集的容量;■config_file和parser:配置文件的路径和名称,及对该文件解析的指针。服务属性结构体■open_serv_fd,打开的服务套接字描述符;■serv_checked,在进行配置文件解析时,提供解析完成的标志;■serv_next,指向链表中下一个服务属性结构体的指针;■其他:将在配置文件格式中给予介绍。解析文件结构体_fp,配置文件的句柄;■line,指向读取义行数据的起始地址;■data,备份行数据到data,这里所指的行是非空非注释行;■Iineno,在配置文件中读取一行的行号值。服务监听程序,为各个服务请求创建相应的套接字接ロ为调用socket创建套接字接ロ。采用本具体实施方式中获得可读描述符集的等待标志中的等待标志包括nowait和wait两种,说明了可读描述符集的两种状态。(I)对于TCP协议而言,nowait是典型配置,当被配置为nowait状态时,监听程序不必等待某个服务子进程的结束就可以接受对该服务的另ー个连接请求;`(2)对UDP协议而言,wait是典型配置,当被配置为wait状态时,监听程序在创建了UDP服务程序后,监听套接字移除描述符集,等UDP服务退出之后再加到描述符集中。采用本具体实施方式中调用fork创建的子进程转换为守护进程,目的在于将待处理的套接字复制到标准输入流stdin描述符0,标准输出流stdout描述符I和标准错误流stderr描述符2,然后关闭原套接字。其中,标准输入读,为从原网络套接字读;标准输出和标准错误输出,为向原网络套接字读。具体实施方式ニ、本具体实施方式与具体实施方式一不同的是所述步骤Al用于服务监听程序准备的步骤包括如下步骤:All用于将全局变量初始化的步骤;A12用于将进程转化为守护进程的的步骤;A13用于修改进程资源限制的步骤;A14用于安装信号处理函数的步骤。所述守护进程又称精灵进程(daemon)是ー种在后台运行,不与任何控制终端关联,是生存期较长的进程。由于姆个进程可以通过getrlimit(软限制)和setrlimit(硬限制)函数进行查询和更改自己的资源限制。这两个函数的操作对象是ー个指向下面结构的指针:structrlimit{rlimtrlimcur;/*softlimit:currentlimit*/rlim—trlim—max;/*hardlimit:maximumvalueforrlimcur*/};本发明对软限制进行设置,保证进程的软限制是非RUM_INFINITY,将rlim_cur设置为64,也就是本进程最大打开的资源数为64,意味着最多可同时处理64个服务。所述用于安装信号处理函数的步骤的作用为提供系统异常时产生的信号的处理方法,參见表1。表1对信号的处理方法权利要求1.ー种LXI仪器的服务监听方法,其特征在于它包括监听过程A和服务进程B:所述监听过程A包括如下步骤:Al:用于监听服务请求的准备步骤;A2:用于读取配置文件,并根据配置文件创建套接字描述符的步骤:读取配置文件,解析以获取各服务请求的属性,并根据解析结果为各服务请求创建相应的套接字描述符;A3:用于将套接字描述符添加到ー个描述符集的步骤;A4:用于将请求服务的端口号和通配IP地址绑定到对应服务器的套接字接ロ的步骤;A5:用于由所述套接字接ロ调用listen接受服务请求的步骤;A6:用于调用select扫描的步骤,对步骤A3所述描述符集进行扫描,获得可读描述符集的等待标志;当可读描述符集的等待标志为nowait时,则进入步骤A71;当可读描述符集的等待标志为wait时,则进入步骤A72;A71:用于调用acc印t接收,然后调用fork创建子进程的步骤,其中父进程用于关闭acc印t返回的套接字并返回到步骤A6,子进程用于仅保留acc印t返回的套接字,关闭其余套接字的进程,然后进入步骤AS;A72:用于调用fork创建子进程的步骤;其中父进程用于关闭acc印t返回的套接字并返回到步骤A6调用select扫描的进程步骤,子进程用于仅保留acc印t返回的套接字,关闭其余套接字的进程,主进程将步骤A6中所述等待标志为wait的套接字描述符移除描述符集,并等待子进程结束后将该套接字描述符添加到描述符集中返回步骤A6;AS:用于将子进程转换为守护进程的步骤,所述步骤使空设备具有标准输入流stdin描述符0,标准输出流stdout描述符I和标准错误流stderr描述符2;A9:用于调用exec执行服务所对应的服务进程的步骤;所述服务进程B包括如下步骤:B1:用于获取步骤A9所述服务进程信息的步骤;B2:用于调用read从描述符0读入请求服务端发送的指令的步骤;B3:用于调用服务进程的驱动库执行指令的步骤;B4:用于调用write向描述符I写入执行结果信息的步骤;B5:用于关闭描述符,退出的步骤。2.根据权利要求1所述的ー种LXI仪器的服务监听方法,其特征在于所述步骤Al用于服务监听程序准备的步骤的具体实现过程:All用于将全局变量初始化的步骤;A12用于将进程转化为守护进程的的步骤;A13用于修改进程资源限制的步骤;A14用于安装信号处理函数的步骤。3.根据权利要求2所述的ー种LXI仪器的服务监听方法,其特征在于所述步骤AS与所述步骤A12均包括如下步骤C:Cl用于调用umask将文件模式创建屏蔽字设置为0的步骤;C2用于调用fork创建子进程,并使父进程退出的步骤;C3用于调用setsid创建ー个会话的步骤;C4用于将当前的工作目录设置为根目录的步骤;C5用于关闭从父进程中继承来的打开的描述符的步骤;C6用于打开空设备,使空设备具有标准输入流stdin描述符O,标准输出流stdout描述符I和标准错误流stderr描述符2的步骤。4.根据权利要求1所述的ー种LXI仪器的服务监听方法,其特征在于所述用于获取服务进程信息的步骤BI中服务进程包括:LXI载板服务进程、槽位0服务进程、槽位I服务进程,载板间/模块间通信服务进程和触发系统服务进程。全文摘要一种LXI仪器的服务监听方法,涉及LXI仪器开发领域,解决现有服务方法由于设计成并发服务的方式会存在不工作的进程仍然占用进程表的表项和系统资源,造成服务器内部资源浪费,相同的启动过程重复进行,需要更多的存储和运行空间的问题。包括监听服务请求的准备、根据配置文件常见套接字描述符、将套接字描述符添加到一个描述符集、将请求服务的端口号和通配IP地址绑定到对应服务器的套接字接口、由所述套接字接口调用listen接受服务请求、调用select扫描,调用accept接收、调用fork创建子进程、将子进程转换为守护进程、调用exec执行服务所对应的服务进程的监听过程和具体的服务过程组成。本发明可广泛应用于LXI仪器的服务监听工作。文档编号H04L29/08GK103117895SQ20131002968公开日2013年5月22日申请日期2013年1月25日优先权日2013年1月25日发明者刘兆庆,乔立岩,张毅刚,潘邵武,满源,彭喜元申请人:哈尔滨工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1