
nio
追寻北极
没有月亮的晚上,我们相信星光。没有路可走的时候,我们相信远方.--
展开
-
netty4.0.x源码分析—executor和loop
之前在第一篇文章里面对event的总体结构进行了简单的分析,没有结合代码理清流程,所以对于excutor和loop的具体执行机制还是很模糊,这篇文章针对代码从上至下进行分析,相信对理解excutor和loop到底是怎么关联的有所帮助。 我们基于服务端常用的代码,EventLoopGroup bossGroup = new NioEventLoopGroup();为主线进行分析,这个转载 2015-07-07 17:00:36 · 925 阅读 · 0 评论 -
LengthFieldPrepender和LengthFieldBasedFrameDecoder
1,使用LengthFieldPrepender编码,LengthFieldBasedFrameDecoder解码的netty传输原创 2015-07-06 17:25:31 · 4435 阅读 · 0 评论 -
Netty5入门学习笔记001
Netty官网:http://netty.io/本例程使用最新的netty5.x版本编写服务器端:TimeServer 时间服务器 服务端接收客户端的连接请求和查询当前时间的指令,判断指令正确后响应返回当前服务器的校准时间。?123456789101112转载 2015-07-07 14:10:25 · 736 阅读 · 0 评论 -
Netty5入门学习笔记002-TCP粘包/拆包问题的解决之道(上)
TCP网络通信时候会发生粘包/拆包的问题,接下来探讨其解决之道。什么是粘包/拆包一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议转载 2015-07-07 14:18:58 · 820 阅读 · 0 评论 -
netty中LengthFieldBasedFrameDecoder的使用
在org.jboss.netty.handler.codec.frame包中,有LengthFieldBasedFrameDecoder类用来解析带有长度属性的包,只要我们在传输协议中加入包的总长度就行了(也许有更好的方法) 具体方法:1.可在数据包前加4个字节表示包的总长度,例如: /** * 传输协议* |------------------------------转载 2015-07-06 17:10:16 · 837 阅读 · 0 评论 -
Netty的超时机制
技术点描述ReadTimeoutHandler读取数据超时处理WriteTimeoutHandler写数据超时处理IdleStateHandler状态空闲处理 通过以上三种方式,可以轻松实现SOCKET长连接的心跳包机制。另要注意的是这里所说的超时是指逻辑上的超时,而非TCP连接超时。实现方案ReadTimeoutHandler,WriteTim转载 2015-07-06 17:56:08 · 7964 阅读 · 0 评论 -
Netty5入门学习笔记003-TCP粘包/拆包问题的解决之道(下)
TCP网络通信时候会发生粘包/拆包的问题,上节使用定长解码器解码,本次使用Netty提供的特殊分隔符解码器还是用上节中的代码例子,但是只需要修改一下发送的消息和配置一下解码器就可以了客户端发送消息中添加分隔符做为指令的结束符,模拟多条指令粘包发出服务器配置分隔符解码器使用&符号拆包运行结果:服务器使用分隔符解码器成功拆包。当然还有更复杂的自定义协议处转载 2015-07-07 14:20:31 · 754 阅读 · 0 评论 -
netty4.0.x源码分析—write和flush
一般的开发者write和flush数据,都是基于ChannelHandlerContext ctx,然后调用其相应的write和flush方法。下面分别对这两个方法进行代码分析。(这里顺便提示一下,这两个方法都是从应用往底层发数据,属于OutboundHandler类型。如果没有特别的需求,我们不需要定义自己的handler,可以使用默认的Handler,这个在后面的分析中会体现。)1、wri转载 2015-07-07 15:32:06 · 712 阅读 · 0 评论 -
netty 4.x源码分析
服务端需要经过socket、bind、accept、read、write等步骤,客户端需要经过socket、connect、read、write等步骤,后续此系列文章会对每一个步骤如何发生进行分析。 netty4源码分析-线程的创建netty4源码分析-socketnetty4源码分析-bind Netty4源码分析-NioEventLoop实现的线程运行逻辑netty4源码分转载 2015-07-07 17:55:54 · 2796 阅读 · 0 评论 -
Mina、Netty、Twisted一起学(五):整合protobuf
protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化、反序列化),一般应用于网络传输,可支持多种编程语言。protobuf如何使用这里不再介绍,本文主要介绍在MINA、Netty、Twisted中如何使用protobuf,不了解protobuf的同学可以去参考我的另一篇博文。在前面的一篇博文中,有介绍到一种用一个固定为4字节的前缀Hea转载 2015-07-06 17:24:36 · 670 阅读 · 0 评论 -
netty4.0.x源码分析—bootstrap
Bootstrap的意思就是引导,辅助的意思,在编写服务端或客户端程序时,我们都需要先new一个bootstrap,然后基于这个bootstrap调用函数,添加eventloop和handler,可见对bootstrap进行分析还是有必要的。1、bootstrap结构图bootstrap的结构比较简单,涉及的类和接口很少,如下图所示,其中Bootstrap则是客户端程序用的引导类,Serv转载 2015-07-07 15:03:40 · 985 阅读 · 0 评论 -
netty4.0.x源码分析—channel
1、channel总体机构图nio channel的总体结构图如下:2、关键类和接口分析2.1 基于NioServerSocketChannel进行分析1)ChannelChannel是顶层接口,继承了AttributeMap, ChannelOutboundInvoker, ChannelPropertyAccess, Comparable,它作为一个具体IO能力的转载 2015-07-07 16:28:58 · 774 阅读 · 0 评论 -
netty4.0.x源码分析—ChannelPipeline
备注:本文的分析基于netty 4.0.9final版本1、ChannelPipeline结构图2、关键类和接口分析上一篇关于Channel的文章,在AbstractChannel的介绍中,以及提到了pipeline,这是操作处理的入口,是一个比较重要的概念,这里有必要对pipeline分析一下。1)ChannelInboundInvoker[java] v转载 2015-07-07 16:47:06 · 865 阅读 · 0 评论 -
netty4.0.x源码分析—event
备注:本文的分析基于netty4.0.9final版本1、event总体结构图event总体结构类图如下:2、event关键类和接口分析1)基于NioEventLoop对关键类和接口进行分析,下面是它的关系图:EventExecutor相当于只有一个EventExcutor的EventExecutorGroup,它的next方法返回的是自己的引用转载 2015-07-07 17:03:01 · 1344 阅读 · 0 评论