面向标准的水文监测的研究与实现(2)

作者:郭峰 肖建军 更新时间:2017-04-14 12:39 点击:
【论文发表关健词】水文监测;NIO;Netty框架;异步
【职称论文摘要】
针对TCP粘包问题提出以下拆包策略: 6)根据特定的分隔符对报文进行分割 7)在包尾增加回车换行符进行分割; 8)消息长度固定; 9)根据消息中的长度字段解析报文。 4.2.2 业务数据编码/解码 ObjectEncoder和Object


针对TCP粘包问题提出以下拆包策略:
6)根据特定的分隔符对报文进行分割
7)在包尾增加回车换行符进行分割;
8)消息长度固定;
9)根据消息中的长度字段解析报文。
4.2.2 业务数据编码/解码
ObjectEncoder和ObjectDecoder是Netty提供的一组用于POJO的序列化及反序列化即编码和解码的处理类。对象序列化是对象持久化的一种实现方法,它是将一个对象的属性和方法转化为一种序列化的格式以用于存储和传输,反序列化就是根据这些保存的信息重建对象的过程[8]。
当服务端向客户端发送消息时,需要对业务消息进行编码,即将实体类对象序列化为ByteBuf,不需要与TCP层打交道,也就不存在粘包问题。此时只需考虑编码问题,ObjectEncoder是Java序列化编码器,它负责将实现Serializable接口的对象序列化为byte [],然后写入到ByteBuf中用于消息的跨网络传输。编码过后的数据结构如图7所示,经过ObjectEncoder编码之后的数据包会默认在包头添加length字段默认为4Byte,用来标识数据包正文部分的长度。
4.2.3 业务数据处理
经过ObjectDecoder解码过后的数据包是一个完整的包,对应一个业务消息,需要做进一步的业务处理。MyServerHandler是继承自ChannelHandlerAdapter的一个业务处理类,并覆盖了其messageReceived、exceptionCaught等方法,用来对业务数据进行处理。MyServerHandler基于事件驱动机制,当接收到消息时,会激活messageReceived方法,获取功能码,由此来判断消息类型,然后获取校验码,做循环冗余校验,经过校验无误之后,存储到相应的数据库表中供整个系统其他模块的使用。
5 实现与测试
5.1 实现步骤
1)创建一组EventLoopGroup,分别用来负责接收客户端和处理客户端连接,并创建一个ServerBootstrap实例;
2)设置channel属性:ChannelOption.SO_BACKLOG使消息立即发出去,不用等到一定的数据量才发出去,ChannelOption.SO_KEEPALIVE保持长连接;
3)定制自己的ChannelPipeline,加入相应的ChannelHandler;
4)绑定端口,并监听在该端口上的客户端的请求并异步的处理;
5)开启存数据库与发送消息线程;
6)编写自己的ChannelHandler。
5.2 测试结果
按照实现步骤开启服务端,通过一台PC机模拟客户端,PC机的配置为:32位Win7操作系统,2GB内存,Inter Core i3处理器,通过该PC机网服务端发送消息,服务端接收结果如图9所示。
6 结束语
本文设计并实现了基于Netty的水文监测服务端,借鉴了许多开源软件的设计思想,始终保持高内聚低耦合的设计理念,为今后程序的扩展提供了方便。
虽然,本文所设计的服务端已经能基本满足项目的需求,但是功能上也有待进一步完善。下一步所要完善的方向为如何在多客户端连接的同时,服务端向指定客户端的消息推送问题以及网页客户端如何查询指定遥测站客户端信息的问题,同时系统的性能还需进一步优化以满足更多客户端的接入。
参考文献:
[1] 陈威, 郭书普. 中国农业信息化技术发展现状及存在的问题[J]. 农业工程学报, 2013(22): 196-204.
[2] 李林峰. Netty权威指南[M]. 北京: 电子工业出版社, 2014.
[3] 李林峰. NIO框架Netty解析[EB/OL]. (2016-04-11).http://www.jiagoushuo.com/article/1000126.html.
[4] 李林峰. Netty 系列之Netty 线程模型[EB/OL].( 2014-07-11)http://www.infoq.com/cn/articles/netty-threading- model.
[5] 代超, 邓中亮. 基于Netty的面向移动终端的推送服务设计[J]. 软件, 2015, 36(12): 01-04.
[6] JBoss. Netty project[CP/OL]. http://netty.io/,2012-4-1
[7] 中华人民共和国水利部. 水文监测数据通信规约[M]. 北京: 中国水利水电出版社, 2014.
[8] 郭荷清, 王增勋. XML数据绑定及对象序列化的应用研究[J]. 计算机应用与软件, 2006, 23(5).
[9] Norman Maurer. Netty in Action[M]. 5th ed.Connecticut: Manning Publications Co., 2013.

  [10] Alan Bateman. New I /O in JDK 7[R]. Java-One, 2008. 

(责任编辑:论文发表网)转贴于八度论文发表网: http://www.8dulw.com(论文网__代写代发论文_论文发表_毕业论文_免费论文范文网_论文格式_广东论文网_广州论文网)
发表评论
本站模板均经测试成功,请放心下载,遇到任何问题或者需要购买付费论文请联系本站。
表情:
验证码:点击我更换图片