公开/公告号CN101741746A
专利类型发明专利
公开/公告日2010-06-16
原文格式PDF
申请/专利权人 四川长虹电器股份有限公司;
申请/专利号CN200910311243.6
申请日2009-12-11
分类号
代理机构成都虹桥专利事务所;
代理人李顺德
地址 621000 四川省绵阳市高新区绵兴东路35号
入库时间 2023-12-18 00:31:18
法律状态公告日
法律状态信息
法律状态
2012-03-14
授权
授权
2010-09-01
实质审查的生效 IPC(主分类):H04L12/56 申请日:20091211
实质审查的生效
2010-06-16
公开
公开
技术领域
本发明涉及双向数字电视条件接受系统和网络通信技术领域,具体的说是涉及一种基于IOCP的双向CAS网关与用户终端的通信方法。
背景技术
当前,我国数字电视的改造已经在全国范围内得到了普遍的推广,数字化改造已进入“后平移时代”。为使数字电视的运营取得更大的成功,就必须开展新的业务和服务,而其中双向通信就是实现这一目的必要条件。
为支持双向数字电视开展各项互动业务,双向CAS(数字电视双向条件接收系统)除了要支持传统的单项业务之外,还要为双向互动服务的提供安全可靠的保障。现阶段,实现CAS的双向模式,普遍是把互联网作为回传通道,这对于双向CAS设计来说,需要一个业务网关(BG)来作为CAS与终端机顶盒之间交互通信的桥梁。对每一个运营的CAS来说,数字电视用户都数以万计,关键是如何设计一个有效的双向CAS的网关来满足庞大的用户连接数和流量的要求。
要设计一个高性能的BG,关键是选择一种适合于上述要求的网络通信套接字I/O模型以及基于此模型建立一个高效的线程模型。网络通信方法中较为普遍应用的是,基于套接字I/O模型中最常见的select模型而采用的两种模式:串行化或并行化。串行化模式仅用一个线程等待接收客户端请求,当请求到达后,线程被唤醒处理请求,这种模式弊端在于无法同时处理多个客户端的连接请求,显然不符合双向CAS的BG设计要求。并行化模式则是用一个线程等待客户端连接,每当一个新的连接到来时,该线程会创建一个新的线程去专门处理维护和新连接客户端的通信。并行化模式可以同时与多个客户端保持连接通信,但随着客户端数量的增加,工作线程也随之增加,过多的工作线程会导致大量额外的环境切换(contextswitching)。在双向CAS的BG采用这种设计模式的时,与BG同时保持连接的机顶盒数量始终无法突破1300左右的瓶颈,因此这种并行化模式也难以满足实际运营的要求。
为能够使一个应用程序有效地同时管理数量众多的套接字,Windows NT3.5引入了IOCP(I/O Completion Port输入输出完成端口)模型,作为开发高性能服务器的最佳选择。IOCP模型是一种能够使多线程得到合理利用和管理的机制,其理论基础是:并行运行的线程数量必须有上限。如此可有效避免线程数量过多时因进行环境切换所造成的CPU浪费。
发明内容
本发明所要解决的技术问题是:提供一种基于IOCP的双向CAS网关与用户终端的通信方法,解决现有技术中的通信模式难以满足实际运营要求的问题。
本发明解决上述技术问题所采用的技术方案是:基于IOCP的双向CAS网关与用户终端的通信方法,包括以下步骤:
a.在业务网关上创建监听机顶盒连接线程,判断是否有用户终端发起连接,是则执行步骤b,否则就等待并继续监听;
b.创建IOCP工作线程,接受连接,将套接字关联在IOCP对象上;
c.判断用户是否发送请求信息,是则执行步骤d,否则执行步骤e;
d.创建接收数据处理线程,接收用户请求信息并转发至CAS前端,跳转至步骤f;
e.用户终端每隔一定时间向业务网关发送测试信息,判断是否超过一定次数未收到业务网关的回应,是则重新发起连接,否则返回步骤e;
f.CAS前端将针对用户请求信息的回复信息发送至业务网关;
g.业务网关建立回复终端消息线程,将回复信息发送至对应用户终端。
所述步骤e中一定时间为10秒钟,一定次数为3次。
所述步骤a中,监听机顶盒连接线程的工作任务是:
a1.创建IOCP对象,用于为接入的套接字管理其对应的输入输出请求;
a2.创建一个套接字,绑定在指定端口上采用select模型来循环监听接收用户终端的连接;
a3.当新接入一个用户终端的时候,就把新生成的套接字与创建的IOCP对象关联起来。
所述步骤b中,IOCP工作线程的工作任务是:负责循环等待并接收所有关联在IOCP对象上的套接字完成的输入事件。
所述步骤d中,接收数据处理线程的工作任务是:将从IOCP工作线程中收取的数据包进行解析,按照不同的消息类型进行处理,若是连接测试消息则直接回复给对应的用户终端;若是发往CAS前端的数据,则重新封装数据包后,存入公共消息队列,由与CAS前端通信的那部分模块程序发送到CAS前端。
所述步骤g中,回复终端消息线程的工作任务是:循环查询公共消息队列中是否有从CAS前端收到的要回复给终端用户的消息,然后直接发送给对应的终端用户。
本发明的有益效果是:提高用户终端并行化接入数量,提高双向CAS运行效率。
附图说明
图1为本发明中业务网关与用户终端之间的通信流程图。
具体实施方式
下面结合附图对本发明作进一步的描述,
本发明就是基于IOCP的模型,提出了一种双向CAS网关的设计模型,该模型能够满足数量众多的机顶盒的并发连接通信,并且机顶盒的请求能够即时处理响应。
双向CAS的BG(业务网关)程序,设计分为两大独立模块,一个模块用来维护BG与CAS连接通信,由于一个BG只对应一个CAS,所以CAS与BG之间的网络通信就采用最常见的套接字I/O模型——Select模型。
另一个模块用来维护BG与数量众多的用户终端的连接,对于这部分模块的设计就需要引用上述提到的IOCP模型,来满足与成千上万的用户终端的并发连接的要求。然而,IOCP本身是用于开发大型服务器一种网络通信模型,而BG程序只作为网关,不能完全照搬IOCP模型实现服务器的方式来设计BG,本发明采取了从终端接收请求投递到IOCP对象上处理,向终端回复则直接发送不再投递。关于这一部分模块功能,本发明设计了几个独立的线程协调工作来共同实现,分别是一个监听机顶盒连接线程,若干个IOCP工作线程(通常是CPU个数的两倍左右),一个接收数据处理线程,一个向终端用户回复消息的线程。
1.监听机顶盒连接线程具体工作任务是:
a.创建IOCP对象,创建的对象就是被用来为大量接入的套接字管理其对应的I/O请求。
b.创建一个套接字,绑定在指定端口上采用select模型来循环监听接收用户终端的连接。
c.当新接入一个用户终端的时候,就把新生成的套接字与创建的IOCP对象关联起来。
2.IOCP工作线程的工作任务是:负责循环等待并接收所有关联在IOCP对象上的套接字完成的输入事件。
3.接收数据处理线程的工作任务是:将从IOCP工作线程中收取的数据包进行解析,按照不同的消息类型进行处理,若是连接测试消息则直接回复给对应的用户终端;若是发往CAS的透传数据,则重新封装数据包后,存入公共消息队列,由与CAS通信的那部分模块程序发送到CAS。
4.向终端用户回复消息的线程工作任务是:循环查询公共消息队列中是否有从CAS收到的要回复给终端用户的消息,然后直接发送给对应的终端用户。
如图2所示,本发明中的基于IOCP的双向CAS网关与用户终端的通信方法,包括以下步骤:
a.在业务网关上创建监听机顶盒连接线程,判断是否有用户终端发起连接,是则执行步骤b,否则就等待并继续监听;
b.创建IOCP工作线程,接受连接,将套接字关联在IOCP对象上;
c.判断用户是否发送请求信息,是则执行步骤d,否则执行步骤e;
d.创建接收数据处理线程, 接收用户请求信息并转发至CAS前端,跳转至步骤f;
e.用户终端每隔10秒钟向业务网关发送测试信息,判断是否超过3次未收到业务网关的回应,是则重新发起连接,否则返回步骤e;
f.CAS前端将针对用户请求信息的回复信息发送至业务网关;
g.业务网关建立回复终端消息线程,将回复信息发送至对应用户终端。
在具体实施上,可采用以下步骤:1.终端用户发起连接请求,BG程序的监听终端连接线程收到请求后,把这个终端的相关信息存入到pSTBList中,并将返回的套接字存入到pSTBList内对应的pCTX指向的结构体当中。
2.调用CreateIoCompletionPort函数,将返回的套接字关联到创建的IOCP对象上,同时把指向该套接字的指针pCTX也作为参数传入,以后若有完成通知到达时,此pCTX也会随通知一起收到。并且以pCTX所指向结构体中的WSAOVERLAPPED为参数,首次投递WSARecv请求,实际的接收工作会交由IOCP工作线程。
3.用户与BG建立连接后,若无请求发送,则会每隔10秒发送一个测试通道消息,来验证连接是否正常。若三次测试不正常,用户应该关闭套接字,重新与BG建立连接。
4.当用户发送来消息,系统完成WSARecv并将结果发至IOCP对象。IOCP工作线程里的GetQueuedCompletionStatus函数会立即返回,将数据从pCTX指向的结构体中的接收数据存储区取出消息数据交由接收数据处理线程处理。接着IOCP工作线程继续投递WSARecv请求,等待接收用户下一次发送来的消息。
5.接收数据处理线程会解析出是哪个用户发送来的什么消息,如果是发送给CAS的消息,接收数据处理线程会对消息按协议格式进行封装,存入公共消息队列。如果仅是用户维护通道连接的消息,接收数据处理线程会直接调用send函数回复给用户。
6.与CAS通信连接的部分会循环访问公用消息队列,将消息队列中要求转发给CAS的消息取出发送给CAS,同时也把收到的由CAS发往终端的消息,存入到公用消息队列。
7.回复终端消息线程也会循环访问公用消息队列,将消息队列中要求转发给终端的消息取出,解析出目标终端的CA卡号,并依CA卡号从pSTBList找到对应发往的目标终端的套接字,直接调用send函数发送,从而完成目标用户与双向CAS整个请求回复的过程。
机译: 用于系统的双向射频通信方法,例如警报系统,涉及在一个时间窗口内授权向外围模块传输网关,其中另一个窗口由网关动态管理
机译: 基于双向通信系统的显示装置及双向通信方法
机译: 基于id的网络环境中基于移动网关的网络通信方法及系统