Netty之消息發送流程
我們主要了解
-
Client端的消息發送流程
-
服務端消息接收以及處理流程
-
如何理解Reactor反應堆(沒有看懂boss是如何給worker分配任務的)
從上一章節中,我們知道Server啟動后,會不斷輪詢是否有IO事件,如果有則會調用NioEventLoop#processSelectedKeys()處理就緒的IO事件

當 (readyOps & SelectionKey.OP_ACCEPT) != 0 時,這就是服務端 NioServerSocketChannel 的 boss EventLoop 線程輪詢到有新的客戶端連接接入。然后,調用 NioMessageUnsafe#read() 方法,處理新的客戶端連接連入

read方法會調用AbstractNioMessageChannel#read,然后會調用NioServerSocketChannel#doReadMessages

AbstractNioMessageChannel接受連接后會往pipeline里觸發事件:

事件傳播首先通過AbstractChannelHandlerContext和
DefaultChannelPipeline,SimpleChannelInboundHandler,最后到達EchoServerHandler(無論是Boss還是Worker,事件的處理都是通過Channel Pipleline組織的,它是責任鏈模式的實現,包含一個或多個Handler......Pipeline中的事件是如何傳播的沒有很明白~~~可以參考https://www.jianshu.com/p/087b7e9a27a2)


浙公網安備 33010602011771號