服务端创建 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 通信
浙公网安备 33010602011771号