文档章节

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方法。

© 著作权归作者所有

共有 人打赏支持
粉丝 55
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

用POLARDB构建客到智能餐饮系统实践

摘要: 在新零售成为大趋势的今天,餐饮行业也加入到这一浪潮之中。智能餐饮系统将帮助餐饮行业从多个维度提升自己的运营能力和收益,而打造智能餐饮系统SaaS化能力也成为了目前的一个热点。...

阿里云官方博客
27分钟前
1
0
aws S3 util demo

package com.example.demo;import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.auth.BasicAWSCredentials;import co......

经常把天聊死的胖子
今天
5
0
linux下查看cpu、memo、io、swap性能数据脚本

直接贴脚本: 1、cpu #!/bin/bashCurrentDate=`date -d today '+%Y%m%d'`CurrentTime=`date -d today '+%Y%m%d%H%M'`mytext="$CurrentTime\t`top -b -n 1 | grep Cpu\(s\......

郑加威
今天
5
0
MySQL之——查询重复记录、删除重复记录方法大全

MySQL之——查询重复记录、删除重复记录方法大全

安小乐
今天
2
0
spring容器启动,停止,关闭事件监听-ApplicationEvent

ApplicationEvent ApplicationEvent相当于一个事件,所有自定义事件都需要继承这个抽象类。在Eclipse中Ctrl+Shift+H调用类的层次结构列表,可以看到如下 Application下抽象子类ApplicationCo...

tantexian
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部