- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Netty面向移动终端推送服务设计
基于Netty面向移动终端推送服务设计
摘要:随着智能手机和平板电脑等移动多媒体终端的普及和4G的加速发展,移动互联网近年呈现了迅猛的发展态势。基于Android操作系统的各类APP应用如雨后春笋,影响着人们的生活习惯。面向移动端的推送服务通过分析用户喜好给用户推送其感兴趣的内容,能大大提升用户的活跃度和留存率,因此成为了APP应用不可或缺的重要组成部分。然而由于Android官方的消息推送机制C2DM(Cloud to Device Messaging)却有着覆盖率偏低的缺陷,APP开发者需要自己开发消息推送系统。本文通过研究开源消息推送和即时通信系统,分析比较常用的网络通信协议和网络10框架,最终采用Java NIO网络框架Netty和开源数据序列化工具Protocol Buffers实现了轻量级的面向移动端的推送服务系统。
关键词:计算机应用技术;Netty网络框架;推送;Protocol Buffers
中图分类号:TP311.1
文献标识码:A
DOI:10.3969/j.issn.1003-6970.2015.12.001
本文著录格式:代超,邓中亮.基于Netty的面向移动终端的推送服务设计[J].软件,2015,36(12):01-04
0 引言
互联网时代,推送技术在各行各业得到应用。随着移动瓦联网的发展,很多APP应用都集成了推送服务,如微信、网易新闻等。消息推送主要有两种实现方式,客户端定时“拉取”和服务器主动“推送”。“拉取”方式是客户端按照预设的触发条件和时间间隔,不停地向服务器查询更新,然后发出拉取请求以获取最新消息;而“推送”的方式则是在客户端和服务器之间保持一条连接通道,当服务器有新消息时丰动将消息直接发送给客户端,减少交瓦次数,提高了推送效率。以上两种方式各有利弊,但是为了实现移动终端的低功耗和低流量,通常采用服务器丰动“推送”技术。由于服务器丰动“推送”需要在客户端和服务器之间保持TCP长连接,当用户量庞大时,单台服务器可能要保持上卣万个TCP连接,这对于网络服务器的开发要求很高。传统的网络服务器使用BIO(阻塞10)开发,多采用一连接一线程(One thread per connection)的线程模型,即每接受一个连接请求则产牛一个子线程处理该请求,这种模型导致服务器无法承受大量客户端的并发连接,而且频繁的线程上下文切换导致CPU利用效率不高。Netty是一个基于NIO的客户端/服务器框架,NIO采用反应堆(Reactor)模型,其单线程模型如图l所示,其中一个Reactor线程聚合一个多路复用器Selector,可以同时注册、监听和轮询成千上万个客户端连接。Netty可以通过调整参数灵活配置成Reactor单线程、多线程和丰从多线程模型,用少量的线程即可以处理上万条TCP连接,同时Netty中集成了丰流的编解码框架和灵活的自定义编解码器实现,能轻松实现私有的协议栈,很适合开发基于TCP长连接的推送服务。
1 传输协议的制定和编解码实现
网络服务器主要任务是处理与客户端之间的数据交互,为了实现高效率可扩展的推送服务,数据传输协议的制定尤为重要。
1.1 数据传输协议的制定
当前能直接用于生产环境的协议主要有XMPP、MQTT及部分私有协议。XMPP是一种基于XML的实时通信协议,具有很强的扩展性,但是由于XML文本协议带来的数据冗余使其不太适合于移动端使用。MQTT是一种轻量级的、基于代理的“发布/订阅”模式的消息传输协议,专门为低带宽、不稳定网络所设计,协议小巧可扩展性强,比较适合作为移动端的消息协议,但是其不够成熟、实现复杂且没有成熟的Java开源实现。协议就是原数据和消息协议数据之间的一组关系映射,可看作是一种序列化机制,本文基于开源数据序列框架Protocol Buffers实现了一个可扩展的私有消息协议。Protocol Buffers是一个灵活、高效、结构化的数据序列化框架,支持跨语言使用,在拥有.proto文件和知悉POJO对象类型的情况下可以进行POJO对象的编解码。利用Protocol Buffers的特点设计的具体的数据传输协议如图2所示,帧末尾是将POJO对象序列化后的二进制数据,由于Protobuf对POJO解码一般来说需要知悉POJO对象的类型,所以在Protobuf Data之前采用两个字节来表示消息对象的类型。TCP是个“流协议”,TCP协议层不保证消息的完整性,TCP协议底层存在粘包和拆包的问题,所以需要应用层协议来保证消息边界的正确性,一般可以通过在消息头中添加表示消息总长度的字段FrameLen来解决。
1.2 协议编解码框架实现
由于TCP协议的粘包/拆包等特点,白
原创力文档


文档评论(0)