虎门镇做网站/百度 人工客服
相对于读操作而言,Netty在处理写操作上更复杂一些.在之前的文章我们介绍了Netty空闲检测之读空闲,为了介绍Netty空闲检测之写空闲,我们有必要对Netty的写操作做一个整体上的介绍.有助于我们接下来介绍写空闲.在之前的文章我们也说过,在Netty中有两类线程,一类是IO线程,负责读写操作,一类是业务线程,就是处理业务的线程.我们以RocketMQ为例,看下它的源码中,如何分配这两类线程的.
// 源码位置: org.apache.rocketmq.remoting.netty.NettyRemotingServer
我们通过画图的方式,看下这几类线程的位置
客户端连接服务端,服务端有固定的IO线程进行监听客户端的连接请求.当连接完成之后,会将这个连接注册到另一类IO线程上.一个IO线程可以被注册多个连接.
每个通道都有自己的Netty缓冲区,数据先写入Netty缓冲区,最后再会刷入到它们各自的TCP缓冲区中.有可能会存在我们只是把HelloWorld中的Hello刷入了TCP缓冲区,而World还在Netty缓冲区,这样就会出现粘包拆包现象,因此编解码也是Netty中相当重要的组件.
当HelloWorld数据都刷到TCP缓冲区之后,Netty会设置写成功.