文档章节

netty5.0总结

 天下杰论
发布于 2014/11/13 12:02
字数 680
阅读 107
收藏 1
5.0以后内容:
     netty初体验,netty是个高性能的java通信框架,至于oio还是nio,它都支持,核心概念:基于事件驱动的架构,很容易让人联想到观 察者模式。它提供的数据结构为ByteBuf,这个是个什么东西?可以理解为:一个数据的载体,比如我接收和发送的消息,得到的都是ByteBuf对象, 它是对字节流的一个高度抽象化,并提供比NIO的ByteBuffer更多的功能,不至于同一个buffer中经常操作,flip,compact等方 法,更为简洁实用,同时如果客户端和服务端都采用java,那么它也可以提供自定义的object类型的数据载体。netty官方提供的example很 多,客户端和服务端如何写,照猫画虎即可。
     把握住两个关键点即可:*handler和传递的内容(即发送和接收的消息),*handler里面包含具体事件的触发方法:比如 exceptionCaught方法(出现异常时)、messageReceived方法(接收消息时)、channelActive(连接刚建立时)等 方法,采用最新的SimpleChannelInboundHandler 这个handler,T可以为自定义的任何对象,如果不需要自定义对象,那么传递Object即可,如果是自定义对象或者java基本类型或String 类型,那么必须得有个大前提:客户端和服务端都必须得进行一定的转换,换句话说:我的客户端和服务端必须都得用netty的相关API封装一次(具体看 netty例子)。如果不是自定义对象,而传递的是Object,那么在收到消息时,必须进行强制转换为ByteBuf对象,通过 ChannelHandlerContext进行发送,这个时候发送的是ByteBuf对象,如果是自定义对象,那么 ChannelHandlerContext.write(自定义对象)即可,同时必须调用flush方法才能发送出去,也可调用 wirteAndFlush(自定义对象)方法。
      
     深究了两天netty,得出的结论是:如果客户端和服务端都基于netty,那么互发消息,各种类型协议消息,基本都不成问题。官方example很多,照猫画虎,自定义随便玩

     但是,如果我只用netty的服务端,而客户端是一个纯粹的socket,比如其它语言的客户端,比如纯粹只是一个硬件,进行socket连接等等,即不采用netty的API,而且不是java语言,那么就会有一些问题。 

ReferenceCountUtil.release(msg);这是netty提供的一个释放ByteBuf内存的方法,如果不采用这个,直接调用ByteBuf.release方法也可以,如果你调用了writeAndFlush方法。

© 著作权归作者所有

共有 人打赏支持
粉丝 53
博文 443
码字总数 23611
作品 0
沈阳
项目经理
Netty服务器在线上运行了几天,就会出现大量的TIME_WAIT,之后客户端就怎么都连接不上了,服务端的通道总是拒绝连接

netty5.0 服务端运行一段时间后,产生大量的timeout,客户端总是连接不上 客户端是gprs连接

landlore
2016/09/21
1K
7
Android 端用netty5.0要使用到哪些 jar包,求解,用all的话太大了

Android 端用netty5.0要使用到哪些 jar包,求解,用all的话太大了

有毛的汉子
2015/03/31
1K
2
Netty5.0 用在android 上

12-14 17:28:38.906 23413-24753/com.dami.tkhxs I/NettyClient: connect failed Unable to create Channel from class class io.netty.channel.socket.nio.NioSocketChannel reconnect dela......

uglyApple
2016/12/14
186
1
七 netty学习之 boss线程池,worker线程的生命周期

netty的线程模型 1. bossGroup线程组 如果绑定了一个端口的话,那么只有一条线程来处理所有到来的请求.即使这个线程组里可能不止一条线程如果绑定了两个端口的话,那就有两条线程new EventLoop...

plugin
2015/11/08
0
0
netty5.0 在android上 出错 不知道哪里

最近在做一个项目用到netty, java做服务器, android做客户端连接上,数据都能互通, 但是我把服务器关闭后, android客户端并没有报错之类的提示,在文档里说的是channelInactive()这里方法里能响...

hdog
2015/09/29
467
2

没有更多内容

加载失败,请刷新页面

加载更多

驰狼课堂

http://www.chilangedu.com/

求是科技
24分钟前
0
0
jumpserver 报错"Incorrect string value

申明 本文所有内容参考自jumpserver记录命令无法入库问题 #1773 简介 jumpserver 1.4.0在jumpserver.log中大量报错,错误日志 File "/opt/jumpserver/apps/terminal/api.py", line 246, i...

zhnxin
30分钟前
2
0
用户管理相关配置文件及命令

9月19日任务 2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理 扩展知识 实用小工具 简单命令行下实现Linux/Windows文件互传 前提:使用远程工具Xsh...

robertt15
48分钟前
0
0
presto 架构

presto 介绍 是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎 是一种Massively parallel processing (MPP)架构,多个节点管道式执⾏ ⽀持任意数据源(通过扩展式Connect...

张欢19933
48分钟前
0
0
Ajax技术应用

1. 相关概述 1. ajax:即异步js与xml,可以实现客户端与服务端之间数据的异步交互。对于普通的B/S 模式是采用的同步方式,即一次请求必须等待一次服务器响应完成,而异步则是客户端发送请求后...

江左煤郎
49分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部