java-netty-Selector
- 背景:java網絡編程框架底層的多路複用的 面向對象設計
- NioEventLoopGroup:上層是bootstrap起動器,下層是selector。 從學習過程中的案例可以看出,EventLoopGroup裏有多個線程, 這些線程從管理連接通道(channel),處理channel上的讀寫事件,此時就出現了selector和selectionKey
- selector:幹活的,從註冊的socket+事件中,我的理解:當有socket事件發生時,這個事件會被寫入到socket事件緩衝區,selector會循環自己管理的socket事件列表,看哪個socket事件緩衝去有數據,則把數據去出來處理。selector的select方法返回事件個數,如果大於0, 則把事件都放到selector的集合selectedKeys
- selectionKey:封裝數據用的,包含socket+事件+channel+讀寫事件的緩衝區(selectionKey.attachment(),類型是ByteBuffer), 當事件類型是讀或寫時,才會有channel,事件類型是連接Accept時,selectionKey裏沒有channel,此時的channel要從serverSocketChannel.accept()獲得。
- 處理完的selectionKey,要從集合中刪除。
0 位用戶收藏了這個故事!