[发明专利]一种针对SystemV消息队列的I/O复用方法有效
| 申请号: | 201410266122.5 | 申请日: | 2014-06-13 |
| 公开(公告)号: | CN104021196B | 公开(公告)日: | 2017-04-26 |
| 发明(设计)人: | 段锴;王海 | 申请(专利权)人: | 中国民航信息网络股份有限公司 |
| 主分类号: | G06F17/30 | 分类号: | G06F17/30 |
| 代理公司: | 北京瑞思知识产权代理事务所(普通合伙)11341 | 代理人: | 李涛,袁红红 |
| 地址: | 100010 北*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 针对 system 消息 队列 方法 | ||
技术领域
本发明涉及网络通信领域,提供了一种针对System V消息队列的I/O复用方法。
背景技术
System V消息队列:System V是贝尔实验室开发的一个Unix分支版本,消息队列是由System V提供的IPC(Interprocess Communication)进程间通信的机制之一。
I/O复用(I/O multiplexing):当一个进程需要同时处理多个网络连接或交互式输入时,进程通过预先告知操作系统内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪时,它就通知进程进行处理,该机制称为I/O复用,目前支持I/O复用的系统调用包括select、poll、epoll等调用方式。
Socket:网络套接字,一种网络通讯技术。
FIFO:有名管道,一种进程间通信的技术,支持在不同进程之间单向的数据传输。
航班查询系统是民航旅游分销系统最核心的功能之一,它服务于航空公司、机票代理人和购票旅客,为他们供准确实时的国内国际航班详细数据,为广大旅客的购票和出行安排提供支持。该系统已经为民航代理人、淘宝、游易、艺龙等大型机票分销网站,国航、东航、海航等航空公司的机票直销网站提供航班查询功能。该系统访问量达到2000TPS,具有很高的可靠性和性能要求,因此该系统采用了多进程架构,分为网络通信进程和航班查询进程两类。网络通信是航班查询系统需要处理的主要技术之一。WSH(Workstation Handler)进程是航班查询系统专门负责服务端网络通信的进程,一方面它需要处理多个客户端的socket网络连接,从中接收不同客户端的请求报文并放至航班查询进程的请求队列中,同时该进程还要处理一个本地System V消息队列Q_OUT,从中获取应答报文返回客户端,如图1所示。因此WSH进程需要采用I/O复用技术来同时处理来自网络连接和System V消息队列的报文。
通过采用select或poll等系统调用可以实现多个网络连接的I/O复用,但是由于System V消息队列的标识符不属于描述符标识,因此不能在消息队列Q_OUT上采用select或poll等调用。
目前解决该问题的已知方案还有采用多线程技术,也即采用不同的线程分别去处理Q_OUT队列和网络Socket的报文。
多线程方案采用不同的线程分别去处理Q_OUT队列和网络Socket的报文,这种方案的缺点如下:
1)多线程的编程实现难度高,调试复杂;
2)多线程的可靠性较差,一个线程挂掉将导致整个进程挂掉;
3)多线程比单线程有额外的资源开销要求(例如内存和多核CPU),在某些特定用户的环境下(单核CPU和内存受限),多线程方案不能被采用。
发明内容
基于以上问题,本发明提供了一种针对System V消息队列的I/O复用方法,以使得WSH进程可以同时处理来自网络连接和System V消息队列的报文,该方法也可以用于其它有类似服务端处理网络通信需求的系统。本发明的复用方法利用了有名管道(FIFO)技术,FIFO的描述符标识与Socket的描述符类似,可以被select调用和支持,因此通过为WSH进程添加FIFO组件,WSH进程通过select调用对FIFO和不同的网络Socket连接进行I/O复用,航班查询进程在放Q_OUT队列的同时,往FIFO中发送1个字节的报文作为event事件,WSH通过select调用获取该事件,进而触发处理Q_OUT队列中的应答报文,从而借助FIFO达到了对System V消息队列I/O复用的目的。
另外,由于针对有名管道和消息队列的操作是多个独立API,不是原子操作,会带来不一致问题,造成报文发送延迟或死锁,因此本发明还设计了从消息队列接收报文的处理流程来解决。
本发明通过借用有名管道FIFO,使得专门负责服务端网络通信的进程WSH可以在单进程、单线程运行模式下实现对网络Socket和System V消息队列I/O复用的目的。
本方法使用的各种技术比如socket通讯技术、System V消息队列操作、select I/O复用模型都是成熟技术,不再赘述。本方法涉及航班查询进程和WSH进程,是由这两个进程借助有名管道FIFO协同实现对消息队列Q_OUT的I/O复用。
本发明公开了一种针对System V消息队列的I/O复用方法,包括以下步骤:
步骤1,启动WSH进程,创建有名管道FIFO和消息队列Q_OUT;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国民航信息网络股份有限公司,未经中国民航信息网络股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410266122.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:基于零件特征的数控机床加工能力评定方法
- 下一篇:一种复合网版的热压装置





