服务端创建 ServerSocketChannel,绑定监听端口

向 Selector 对象注册感兴趣的 io 事件,OP_ACCEPT

Selector 对象扫描 io 事件,发现有 OP_ACCEPT 事件,则创建 SocketChannel 连接对象,并向 Selector 注册该 SocketChannel 的 OP_READ 事件

Selector 对象扫描 io 事件,发现连接有 OP_READ 事件,则从 SocketChannel 读数据到 ByteBuffer

如果需要往某个 SocketChannel 写数据,则直接调用 write,把 ByteBuffer 写到 SocketChannel 

 

值得注意的是,OP_WRITE 事件是指,tcp 发送缓冲区可写,而不是有数据要写。

事实上,一个 selector 可以注册多个 ServerSocketChannel 和 SocketChannel,但是在 netty 的 bossGruop 中,一个 selector 只注册一个 ServerSocketChannel 。

 

rocketMQ client 和 broker 使用 netty 通信,netty 是 java nio 的封装,rocketMQ master 和 slave 使用 java nio 通信。

zk server 默认使用 nio 通信,leader 和 follower 之间直接使用 bio 通信 

posted on 2018-05-22 10:51  偶尔发呆  阅读(145)  评论(0)    收藏  举报