第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

手把手教你調(diào)試Netty創(chuàng)建連接流程源碼

標(biāo)簽:
Java

执行过程

boss thread

  • NioEventLoop 中的 selector轮询创建连接事件 (ОР_АССЕРT)
  • 创建 socket channel
  • 初始化 socket channel 并从 worker group 中选择一个 NioEventLoop

worker thread

  • 将socket channel注册到选择的NioEventLoop的selector
  • 注册读事件(OP_ READ)到selector 上

接收连接请求的处理本质是对 OP_ACCEPT 的处理,即在 NioEventLoop 中,因为注册到了NioEventLoop的 selector。
分别调试启动 EchoServer 和 EchoClient

  • 跳至对应 handler

    • 当前为 bosseventloop,不是 workereventloop
  • 所以这里 false,又来到注册

  • 创建完连接后了,已经可以开始接收数据了,即准备读数据了

    最后观察下 server 的日志信息

  • 前5行都是服务启动,后面的就是为了创建连接

  • 服务启动过程多了个 bind 过程,且只绑定了一个接口,而对于下面的创建连接过程它有两个端口:客户端端口+server 监听的端口,这就是 socketChannel

接收连接的核心代码

// 阻塞轮询。非阻塞轮询。超时等待轮询
selector.select()/ selectNow()/select(timeoutMillis) 发现 OP_ACCEPT 事件,处理:
SocketChannel socketChannel = serverSocketChannel.accept()
selectionKey = javaChannel().register(eventLoop().unwrappedSelector(), 0, this);
selectionKey.interestOps(OP_READ);

创建连接的初始化和注册是通过pipeline.fireChannelReadServerBootstrapAcceptor中完成

第一次Register并非监听OP_READ,而是0

selectionKey = javaChannel().register(eventLoop().unwrappedSelector(), 0, this)

最终监听OP_READ是通过"Register"完成后的fireChannelActive
(io.netty.channel.AbstractChannel.AbstractUnsafe#register0)触发

Worker’s NioEventLoop是通过Register操作执行来启动。

接受连接的读操作,不会尝试读取更多次(16次)。
因为无法知道后续是否还有连接,不可能一直尝试。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開發(fā)工程師
手記
粉絲
1.4萬
獲贊與收藏
1478

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消