-
Netty学习笔记
收藏通过分析源码学习Netty,学习基于NIO的高性能网络框架的设计。以分析源码为切入点,深入了解框架的设计细节
最近更新文章
Netty的Nio写优化
今天又看了一遍boyan的《Nip trick and trip》,又有一些新的收获。比以前看地更深刻了。其中有一处写到Nio的写优化,当Nio的channel设置为nonblocking时,写 ...
基于Netty打造HttpClient实现股票实时推送
Netty也研究了一段时间,实践是对知识掌握的试金石。有些东西只是看了面儿上的东西我觉得懂了,如不去深入,一旦要用它去做点什么东西却又觉 ...
Netty笔记:ReplayingDecoder中buffer使用的一点小陷阱
ReplayingDecoder的原理是阻塞IO,当没有读到足够的数据时,会抛出RelayError,进入以后的LOOP中不断check是否有足够的数据。因此每次读取时我们倒要check一下buffer的数据。为此Netty提供了ReplayingDecoderBuffer这样一个代理类封装原有的buffer。以readInt为例,首先要检查是否有4个字节可读。不满足抛出ReplayError ...
Netty笔记:ReplayingDecoder
为什么需要ReplayingDecoder,它和FrameDecoder有什么不同呢?ReplayingDecoder是一种特殊FrameDecoder,它能实现在IO阻塞的情况下实现无阻塞的解码。听起来比较拗口而且不好理解,举个例子来说,假设你在用netty设计一个文件传输的模块,采用的Header-Content的协议,在Header中说明文件的长度,我们用一个int来容纳长度,Conten ...
Nio框架需要注意的两个问题(2)
书接上回,上次说到了selector的register和select会有锁冲突,这次再来考虑write的问题。
1. channel.write(Bytebuffer)是不是总是可写,当socket的writeBuffer满的时候会返回0,说明不能再写进任何字节。假设要写入一个很大的ByteBuffer,有可能需要分多次写。
2. channel上执行write操作需要获得锁保证同步,如 ...
Nio框架需要注意的两个问题(1)
研究了一段时间Nio框架,有Netty和Tomcat的Nio Connector总结了一些共性的问题的解决方案。
1. Selector的register和select有锁冲突,例如tomcat的Nio Connector,他采用的Acceptor和Poller的模式,Acceptor只负责接收socket,Poller是负责读写的IO线程,这种模式不用于nginx,Poller( ...
Netty笔记:FrameDecoder
FrameDecoder是Netty Protocol Decode最关键的Decoder,几乎所有和协议解码相关的Decoder都继承自它,那到底解决了什么问题?为什么需要这样的一个部件呢?TCP的传输是基于流的,每个数据包都有可能被分片和然后重组,这时候我们就需要协议去界定一个数据包,通常来说用来方式来确定数据包的边界,一个是基于长度,简单一点就是规定数据包的长度,例如规定每个数据包的 ...