一种采用Netty框架实现的TCP服务通道的制作方法

文档序号:7766879阅读:1129来源:国知局
专利名称:一种采用Netty框架实现的TCP服务通道的制作方法
技术领域
本发明涉及通信技术领域,涉及一种能够异步高效传输大量数据的方法以及一种 能够接受大量TCP连接的服务端通讯通道。
背景技术
随着国家智能电网的推进,电力信息数据的采集将逐渐摒弃传统的人工抄表模式 而采用远程终端控制抄表方式,并将抄表数据通过GPRS、CDMA、230M、光纤等方式传送到主 站电能量采集系统进行分析和应用。为了在主站侧进行数据分析应用以及实时监测用电 情况,就必须确保主站侧电力数据的完整性。但是网络环境复杂性以及为了保证电力系统 的安全而设置的各种软硬件障碍都可能是导致网络不稳定潜在因素,正是由于这些潜在原 因,使得电能信息的采集变得不可预测,因而为了保证电能信息采集的完整性及实时性,提 高采集系统的容灾能力变得刻不容缓。在最新发展的现有技术中,利用GPRS联合网或WCDMA网的数据收发功能,在相应 的地方装设采集终端,并通过GPRS联合网或WCDMA网,将采集终端所采集的数据传送到相 应的电力专网,再由采集系统对这些数据进行解析,并交给中心服务器进行相应的分析和处理。GPRS是欧洲电信协会GSM系统中有关分组数据的标准,它可以提供高达115Kbps 的空中接口传输速率,让若干移动用户能够同时共享一个无线信道,一个移动用户也可以 使用多个无线信道。其中,实际不发送或接收数据包的用户仅占很小一部分网络资源。有 了 GPRS,用户的呼叫建立时间大为缩短,几乎可以做到〃永远在线〃(always online)。由 于上述特点,GPRS网可为移动数据用户提供突发性数据业务,能快速建立连接,且无连接时 延。特别适用于频繁传送小数据量的应用和非频繁传送大量数据的应用。是目前最理想的 用电管理的通讯手段。中国联通推出的CDMA 20001x也有同样的特点,它与GPRS都是介于第二代和第三 代移动通信技术之间的一种技术,通常称为2. 5G,因为它是一个混合体,其中采用TDMA(时 分多址)方式传输语音,并采用分组的方式传输数据。现有的电能信息采集系统,由于采集范围非常广,负控终端、电能量终端、配变终 端、集中器等终端数量十分庞大,在同一时间,有大量的采集终端需要通过与电能量信息采 集系统进行数据交互。在这种背景下,迫切需要一种能够同时管理维护大量TCP连接的通 讯技术,而本发明正式为了解决此难题而设计的。

发明内容
本发明所要解决的技术问题是提供一种采用Netty框架实现的TCP服务通道,能 够异步高效传输大量数据,解决频繁、量大的数据传输问题。为解决上述技术问题,本实用新型的技术方案是一种采用Netty框架实现的TCP 服务通道,其特征在于所述实现方法包括以下步骤
1)打开Netty框架定义的TCP通道服务端口,接受客户端的TCP连接;2)以接受的TCP连接为核心对象创建会话TcpSession,该会话基于TCP连接创 建,提供了多种用户接口 ;3)为新创建的会话TcpSession设置各种参数和加添各种监听器;

4)将新创建的会话TcpSession添加到会话管理器SessionManager中;5)启动会话管理器SessionManager超时检测器,一旦发现某个会话TcpSession 超过一段时间未有通讯事件发生或该会话TcpSession已经断开,则从会话管理器 SessionManager中实时地删除该会话,释放连接资源;6)用户调用会话TcpSession的各种读/写接口按照自己的需求定制操作。Netty是一个异步的,事件驱动的网络编程框架和工具,使用Netty可以快速开发 出可维护的,高性能、高扩展能力的协议服务及其客户端应用;也就是说,Netty是一个基 于NIO的应用,服务器端编程框架,使用Netty可以确保你快速和简单的开发出一个网络应 用;Netty相当简化和流线化了网络应用的编程开发过程,如CP和UDP的socket服务开发。 本发明采用纯异步10的设计方式解决了大量TCP连接的接入问题;采用事件驱动模式保证 了用户对事件感知的实时性;采用外部注入协议解析器的方式为用户提供了一种允许其自 定义应用层数据格式的接口。因此在大量终端接入电能量采集系统时,采用本发明设计的 TCP服务通道,可保证通道的可靠稳定,提高系统的容量,保证终端数据采集的完整率,可有 效的降低电能量采集系统的建设成本。作为改进,步骤2)中,所述用户接口包括会话创建接口、会话关闭接口、读消息接 口、写消息接口、异常捕捉接口。作为改进,所述读消息接口和写消息接口充分利用TCP通讯协议底层的特性,采 用完全异步的设计方式,保证在处理10操作时的速度与高并发性。作为改进,所述完全异步的设计方式即所有的通道层上的读操作和写操作对调用 者来讲均是立即返回的,即表面上将原来耗时的10操作通过本发明的设计方式后变的不 耗时。作为改进,步骤3)中,所述会话TcpSession参数包括读写缓存区的大小,协议解 析器,最大允许通道空闲时间,最近一次读写通道时间;所述监听器包括通道空闲监听器, 通道连接监听器,通道断开监听器。作为改进,所述步骤5)中,如果连接因为各种网络原因而导致某些通道变得不可 用,这时会话管理器SessionManager会自动的清理该废弃的会话资源,如果用户自己需要 关闭某会话,则仅需要调用会话的关闭方法TcpSession. closeO即可完成所有连接资源 的释放。作为改进,协议解析器作用是将双方通过网络传递过来的数据接收后按照一定的 规则恢复成用户可以识别的数据,方便用户进行分析和应用。在本发明中协议解析器提供 了多种实现,分别正对目前市场上流行的《国家电网电力负荷管理系统数据传输规约》,《广 东电网通讯规约》,《公司低压载波集中器本地通信上行协议》《广西102协议》等多种终端 通讯协议提供了终端协议解析器实现。另外还提供了网络中传输的对象解析器实现。协议 解析器需要配合数据缓存区使用,从网络中接收的数据先要存入缓冲区,然后再用协议解 析器从缓冲区中取出完整的协议数据,以供用户分析使用。
协议解析器的工作流程如下1)预先实现 能够识别通道中传输数据的解析器Decoder ;2)创建具体会话TcpSession,并将能识别通道中传输数据的Decoder解析器注入 到会话TcpSession中;3)会话的一方通过TcpSession提供的写通道数据接口向通道中写数据;4)会话的另一方从通道中读取数据并放入本会话内部的自定义数据缓冲区,同时 触发一个接收数据事件;5)在接收事件发生后,协议解析器会从自定义数据缓冲区中按照协议解析器定义 的规则循环解析数据,直到不能解析出完整数据帧为止,同时记录下最后一个完整帧的结 束位置,并将缓冲区中该位置之前的所有数据清除掉;6)如果在本次接收事件发生后,协议解析器成功解析出了完整数据帧,则调用 IoHandler接口提供的messageReceived方法通知用户用可用数据到来。作为改进,所述TCP服务通道屏蔽了底层通讯的具体细节,为用户提供了简单易 用的异步IO服务端通道。作为改进,所述用户接口包括I0Receiver接口,用于自动监听客户端连接、自动接收送客户端传送的数据、对外 提供用户接口的服;Session接口,该接口是基于连接创建的,会话TcpSession是该接口的一种TCP方 式的实现,NettySession是该接口的另一种TCP方式的实现;SessionManager接口,该接口提供针对各种Session的管理功能,实现了简单的 统计;IoHandler接口,该接口的实例应该被设计成IoReceiver实例可见范围内的 唯一实例,可以通过IoReceiver的setloHandler(IoHandlerioh)接口向其实例中注入 IoHandler ;Decoder接口,此接口负责将数据缓冲区中的数据按照一定的格式进行拆分解析, 得到一组用户能识别的数据帧;ByteDecoder 接口,是 Decoder 接 口 的子类,其提供 getBeginByte ()。本发明与现有技术相比所带来的有益效果是本发明采用纯异步10的设计方式解决了大量TCP连接的接入问题;采用事件驱 动模式保证了用户对事件感知的实时性;采用外部注入协议解析器的方式为用户提供了一 种允许其自定义应用层数据格式的接口。因此在大量终端接入电能量采集系统时,采用本 发明设计的服务通道,可保证通道的可靠稳定,提高系统的容量,保证终端数据采集的完整 率,可有效的降低电能量采集系统的建设成本。


图1为采用Netty框架实现的TCP服务通道工作流程图;图2为IoReceiver服务接口定义及实现类结构图;图3为IoHandler接口定义及实现类结构图;图4为Session接口定义及实现类结构图5为SessionManager接口定义及实现类结构图; 图6为Decoder接口实现类结构图;图7为TCP服务通道的具体工作流程。
具体实施例方式下面结合说明书附图对本发明作进一步说明。如图1所示,一种采用Netty框架实现的TCP服务通道,所述TCP服务通道屏蔽了 底层通讯的具体细节,为用户提供了简单易用的异步IO服务端通道,所述实现方法包括以 下步骤1)打开Netty框架定义的TCP通道服务端口,接受客户端的TCP连接;2)以接受的TCP连接为核心对象创建会话TcpSession,该会话基于TCP连接创 建,提供了多种用户接口 ;所述用户接口包括会话创建接口、会话关闭接口、读消息接口、写 消息接口、异常捕捉接口等;所述读消息接口和写消息接口充分利用TCP通讯协议底层的 特性,采用完全异步的设计方式,保证在处理IO操作时的速度与高并发性;所述完全异步 的设计方式即所有的通道层上的读操作和写操作对调用者来讲均是立即返回的,即表面上 将原来耗时的IO操作通过本发明的设计方式后变的不耗时;3)为新创建的会话TcpSession设置各种参数和加添各种监听器;所述会话 TcpSession参数包括读写缓存区的大小,协议解析器,最大允许通道空闲时间,最近一次读 写通道时间等;所述监听器包括通道空闲监听器,通道连接监听器,通道断开监听器等;4)将新创建的会话TcpSession添加到会话管理器SessionManager中;会话 管理器SessionManager,其设计目的在于管理各种会话,会话管理器SessionManager 的作用是为用户提供一个所有会话统一管理的接口,相当于一个会话资源管理池,在 SessionManager中,会自动的将已经失效的会话关闭回收,起到优化程序性能的作用;5)启动会话管理器SessionManager超时检测器,一旦发现某个会话TcpSession 超过一段时间未有通讯事件发生或该会话TcpSession已经断开,则从会话管理器 SessionManager中实时地删除该会话,释放连接资源;如果连接因为各种网络原因而导致 某些通道变得不可用,这时会话管理器SessionManager会自动的清理该废弃的会话资源, 如果用户自己需要关闭某会话,则仅需要调用会话的关闭方法TcpSession. close ()即可 完成所有连接资源的释放;6)用户调用会话TcpSession的各种读/写接口按照自己的需求定制操作;会话 TcpSession实现了 Session接口提供的写通道、判断通道是否可用、关闭通道、设置通道解 析器、设置通道超时时间、设置通道空闲时间、设置各种事件监听器等功能。协议解析器作用是将双方通过网络传递过来的数据接收后按照一定的规则恢复 成用户可以识别的数据,方便用户进行分析和应用。在本发明中协议解析器提供了多种实 现,分别正对目前市场上流行的《国家电网电力负荷管理系统数据传输规约》,《广东电网通 讯规约》,《公司低压载波集中器本地通信上行协议》《广西102协议》等多种终端通讯协议 提供了终端协议解析器实现。另外还提供了网络中传输的对象解析器实现。协议解析器需 要配合数据缓存区使用,从网络中接收的数据先要存入缓冲区,然后再用协议解析器从缓 冲区中取出完整的协议数据,以供用户分析使用。
协议解析器的工作流程如下1)预先实现能够识别通道中传输数据的解析器Decoder ;2)创建具体会话TcpSession,并将能识别通道中传输数据的Decoder解析器注入 到会话TcpSession中;3)会话的一方通过TcpSession提供的写通道数据接口向通道中写数据 ;4)会话的另一方从通道中读取数据并放入本会话内部的自定义数据缓冲区,同时 触发一个接收数据事件;5)在接收事件发生后,协议解析器会从自定义数据缓冲区中按照协议解析器定义 的规则循环解析数据,直到不能解析出完整数据帧为止,同时记录下最后一个完整帧的结 束位置,并将缓冲区中该位置之前的所有数据清除掉;6)如果在本次接收事件发生后,协议解析器成功解析出了完整数据帧,则调用 IoHandler接口提供的messageReceived方法通知用户用可用数据到来。本发明中包括如下几个主要核心的接口 如图2所示,IoReceiver接口,是一个用于自动监听客户端连接、自动接收送 客户端传送的数据、对外提供用户接口的服务;对调用者来讲,IoReceiver是用户进 行所有通道操作的入口,一旦获取了该接口的实例,就获得了对该通道所有操作的特 权,该接口主要提供了 bind(InetSocketAddress IocalAddress)(绑定服务端地址), StartReceiver ()(启动服务),write (byte [] data, Object chn)(向指定通道写数据), setloHandler (IoHandler ioh)(设置 Io 处理器),getloHandler ()(获取 Io 处理器), getSessionManager ()(获取Ii舌管理器 SessionManager),addDecoderlfAbsent (Decoder decoder)(添加协议解析器),shutdown ()(关闭通道服务)等。最初的设计中,IoReceiver 接口 的实现有 DatagramReceiver, ServerSocketReceiver, NettySocketServer 等多禾中方 式,本发明中获取的是NettySocketServer实现方式的实例;如图4所示,Session接口,该接口是基于连接创建的,TcpSession是该接口 的一种TCP方式的实现,NettySession是该接口的另一种TCP方式的实现;在本发明中 Session任何子类的实例都不允许用户自己创建,而必须通过其对应的IoReceiver服 务来创建。此接口主要提供了通道的基本操作,如读、写通道等,该接口还提供了基于通 道事件的事件监听器接口,如通道连接、断开、空闲等状态的监听,该接口主要提供了如 下接口 write (byte [] data)(向通道写数据),writeAsyn (byte [] data)(向通道采用 异步的方式写数据),register (SessionManager sm)(将会话注册到会话管理器中), getSessionManager ()(获取会话管理器),attachment (Ob jecto)(添加附件),setldleLi stener (SessionIdleListener sil)(添力口空闲监听器),setConnectListener (ConnectLi stener del)(添力口连接监听器),setDisConnectListener (DisConnectListener del)(添 加连接断开监听器),close ()(关闭会话)等。另外TcpSession的实现内置了自定义数据 缓冲区,用于整合数据碎片;如图5所示,SessionManager接口,该接口提供针对各种Session的管理功 能,实现了简单的统计;该接口主要提供了如下接口 getSeSSi0n (Object key)(根 据 SessionKey 获取 Session),getSessions ()(获取本管理器下所有的 Session), register (Object key, Session s)(将指定 Session 和 SessionKey 注册到本管理器中),unregister (Object key)(从本管理器中取消对某个Session的注册), bindReadldleStatusChecker ()(绑定Session读空闲监听器,用于监听Session空闲读事 件),bindffriteldleStatusChecker ()(绑定 Session 写空闲监听器,用于监听 Session 空 闲写事件),clearO (清空本管理器中所有的Session),dispose ()(销毁本管理器中所有 的Session,并释放所有Session所占用的资源);如图3所示,IoHandler接口,该接口的实例应该被设计成IoReceiver实例可见范 围内的唯一实例,可以通过IoReceiver的setloHandler (IoHandler ioh)接口向其实例中 注入 IoHandler,该接口主要提供了如下接口 sessionCreated (Session s) (Session 创建 之后调用此接口告知用户),sessionClosed(Session s) (Session被关闭之后调用此接口 告知用户),exc印tionCaught (Throwable t),(Session操作过程中发生了任何异常情况, 均可通过此接口告知用户),messageReceived (Session s, Object msg),(某个 Session 会 话中有可用的用户数据被接收到时调用此接口告知用户hmessageSent (Sessions,Object msg),(向Session通道中写数据后调用此接口告知用户);如图6所示,Decoder接口,此接口负责将数据缓冲区中的数据按照一定 的格式进行拆分解析,得到一组用户能识别的数据帧;该接口主要提供了如下接口 checkFrame (byte []buffer, int beginPos,int len)(从缓冲区的指定位置开始,校验指定 长度的数据,判断这部分数据是否满足该解析器对应的用户数据格式,并返回解析成功后 下一帧的开始位置),getMaxDataLenO (该解码器支持的一个完整帧的最大数据长度);ByteDecoder接口是Decoder接口的子类,其提供的getBeginByte ()(获取符合协 议规范的报文的起始符,即帧的第一字节),getEndByteO (获取符合协议规范的报文的结 束符,即帧的最后一字节)两个方法对二进制个数数据的解析非常有用。如图7所示,下面详细介绍一下本发明中TCP服务通道的具体工作流程1)创建 NettySocketServer 实例对象(即 IoReceiver 的实例);2)向I0Receiver实例对象中添加协议解析器,如国电协议解析器 NePrtlDecoder,广电协议解析器 GePrtlDecoder ;3)为 IoReceiver 实例对象设置 IoHandler ;4)将IoReceiver实例对象绑定服务地址和端口 ;5)启动 IoReceiver 服务,即调用其 startReceiver ()接口 ;6)以上流程会打开服务端口,如果有客户端向该服务端发起连接请求,则 IoReceiver实例对象会自动接收连接并创建会话Session且将该会话添加到该服务对应 的SessionManager中(注由NettySocketServer服务创建的Session实例实际上都是 NettySession 的实例);7) Session通道中的所有数据都是通过SessionManager实时监测读取并放入每 个会话对应的数据缓冲区,然后由每个通道各自的协议解析器对缓冲区数据进行抽取,并 将抽取的用户数据通过IoHandler接口通知用户;8)用户如果想将数据写入会话通道,则只需调用Session提供的写数据和异步写 数据接口。本发明采用纯异步IO的设计方式解决了大量TCP连接的接入问题;采用事件驱 动模式保证了用户对事件感知的实时性;采用外部注入协议解析器的方式为用户提供了一种允许其自定义应用层数据格式的接口。因此在大量终端接入电能量采集系统时,采用本 发明设计的服务通道,可保证通道的可靠稳定,提高系统的容量,保证终端数据采集的完整 率,可有效的降低电能量采集系统的建设成本。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种采用Netty框架实现的TCP服务通道,其特征在于所述实现方法包括以下步骤1)打开Netty框架定义的TCP通道服务端口,接受客户端的TCP连接;2)以接受的TCP连接为核心对象创建会话TcpSession,该会话基于TCP连接创建,提 供了多种用户接口;3)为新创建的会话TcpSession设置各种参数和加添各种监听器;4)将新创建的会话TcpSession添加到会话管理器SessionManager中;5)启动会话管理器SessionManager超时检测器,一旦发现某个会话TcpSession 超过一段时间未有通讯事件发生或该会话TcpSession已经断开,则从会话管理器 SessionManager中实时地删除该会话,释放连接资源;6)用户调用会话TcpSession的各种读/写接口按照自己的需求定制操作。
2.根据权利要求1所述的一种采用Netty框架实现的TCP服务通道,其特征在于步骤 2)中,所述用户接口包括会话创建接口、会话关闭接口、读消息接口、写消息接口、异常捕捉 接口。
3.根据权利要求2所述的一种采用Netty框架实现的TCP服务通道,其特征在于所述 读消息接口和写消息接口充分利用TCP通讯协议底层的特性,采用完全异步的设计方式。
4.根据权利要求3所述的一种采用Netty框架实现的TCP服务通道,其特征在于所述 完全异步的设计方式即所有的通道层上的读操作和写操作对调用者来讲均是立即返回的。
5.根据权利要求1所述的一种采用Netty框架实现的TCP服务通道,其特征在于步 骤3)中,所述会话TcpSession参数包括读写缓存区的大小,协议解析器,最大允许通道空 闲时间,最近一次读写通道时间;所述监听器包括通道空闲监听器,通道连接监听器,通道 断开监听器。
6.根据权利要求5所述的一种采用Netty框架实现的TCP服务通道,其特征在于所 述协议解析器作用是将双方通过网络传递过来的数据接收后按照一定的规则恢复成用户 可以识别的数据,方便用户进行分析和应用。
7.根据权利要求6所述的一种采用Netty框架实现的TCP服务通道,其特征在于所 述协议解析器的工作流程如下1)预先实现能够识别通道中传输数据的解析器Decoder;2)创建具体会话TcpSession,并将能识别通道中传输数据的Decoder解析器注入到会 话 TcpSession 中;3)会话的一方通过TcpSession提供的写通道数据接口向通道中写数据;4)会话的另一方从通道中读取数据并放入本会话内部的自定义数据缓冲区,同时触发 一个接收数据事件;5)在接收事件发生后,协议解析器会从自定义数据缓冲区中按照协议解析器定义的规 则循环解析数据,直到不能解析出完整数据帧为止,同时记录下最后一个完整帧的结束位 置,并将缓冲区中该位置之前的所有数据清除掉;6)如果在本次接收事件发生后,协议解析器成功解析出了完整数据帧,则调用 IoHandler接口提供的messageReceived方法通知用户用可用数据到来。
8.根据权利要求1所述的一种采用Netty框架实现的TCP服务通道,其特征在于所述步骤5)中,如果连接因为各种网络原因而导致某些通道变得不可用,这时会话管理器 SessionManager会自动的清理该废弃的会话资源,如果用户自己需要关闭某会话,则仅需 要调用会话的关闭方法TcpSession. close ()即可完成所有连接资源的释放。
9.根据权利要求1所述的一种采用Netty框架实现的TCP服务通道,其特征在于所 述用户接口包括IoReceiver接口,用于自动监听客户端连接、自动接收送客户端传送的数据、对外提供 用户接口的服;Session接口,该接口是基于连接创建的,会话TcpSession是该接口的一种TCP方式的 实现,NettySession是该接口的另一种TCP方式的实现;SessionManager接口,该接口提供 针对各种Session的管理功能,实现了简单的统计;IoHandler接口,该接口的实例应该被设计成IoReceiver实例可见范围内的唯一 实例,可以通过IoReceiver的setloHandler (IoHandler ioh)接口向其实例中注入 IoHandler ;Decoder接口,此接口负责将数据缓冲区中的数据按照一定的格式进行拆分解析,得到 一组用户能识别的数据帧;ByteDecoder 接口,是 Decoder 接 口 的子类,其提供 getBeginByte ()。
10.根据权利要求1所述的一种采用Netty框架实现的TCP服务通道,其特征在于所 述TCP服务通道屏蔽了底层通讯的具体细节。
全文摘要
一种采用Netty框架实现的TCP服务通道,实现流程如下1)打开Netty框架定义的TCP服务端口,并接受客户端的TCP连接;2)将接受的TCP连接虚拟成一个会话TcpSession,并为该会话TcpSession设置各种参数及监听器,然后将其添加到会话管理器SessionManager中;3)启动SessionManager超时检测器,一旦发现某个会话TcpSession超过一段时间未有通讯事件发生或该会话TcpSession已经断开,则从SessionManager管理器中及时地删除该会话;4)用户调用TcpSession的各种读/写接口定制自己的操作。本发明采用优化的设计方法,充分地利用了底层通讯的特性,保证了对大量TCP连接高效可靠的使用。
文档编号H04L29/06GK102045346SQ20101056527
公开日2011年5月4日 申请日期2010年11月25日 优先权日2010年11月25日
发明者沈祥 申请人:深圳市科陆电子科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1