2018-08-23 netty異步

//netty 中writeandflush()方法

整體步驟:先write再flush

write流程

ctx.writeAndFlush() –> TailHandler –> Handler … —> HeadHandler –> Unsafe.write()?

write方法實(shí)際上并沒有將消息寫出去, 而是將消息msg和此次操作的promise放入到當(dāng)前連接的輸出緩沖區(qū)OutboundBuffer中了;

flush流程

ctx.writeAndFlush() –> TailHandler –> Handler … —> HeadHandler –> Unsafe.flush() –> AbstractNioByteChannel.doWrite() –> ChannelOutboundBuffer.remove() –> Promise.notifyListeners();

Netty強(qiáng)烈建議直接通過添加監(jiān)聽器的方式獲取IO結(jié)果,而不是通過同步等待的方式


如果用戶操作調(diào)用了sync或者await方法,會在對應(yīng)的future對象上阻塞用戶線程,例如future.channel().closeFuture().sync()

//springboot第27章

ApplicationEvent以及Listener是Spring為我們提供的一個事件監(jiān)聽、訂閱的實(shí)現(xiàn),內(nèi)部實(shí)現(xiàn)原理是觀察者設(shè)計模式

在Spring內(nèi)部中有多種方式實(shí)現(xiàn)監(jiān)聽如:@EventListener注解、實(shí)現(xiàn)ApplicationListener泛型接口、實(shí)現(xiàn)SmartApplicationListener接口等,我們下面來講解下這三種方式分別如何實(shí)現(xiàn)。

既然是監(jiān)聽所有的事件發(fā)布,那么SmartApplicationListener接口添加了兩個方法supportsEventType、supportsSourceType來作為區(qū)分是否是我們監(jiān)聽的事件,只有這兩個方法同時返回true時才會執(zhí)行onApplicationEvent方法。

事件監(jiān)聽是無序的,監(jiān)聽到的事件先后順序完全隨機(jī)出現(xiàn)的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • netty常用API學(xué)習(xí) netty簡介 Netty是基于Java NIO的網(wǎng)絡(luò)應(yīng)用框架. Netty是一個NIO...
    花丶小偉閱讀 6,134評論 0 20
  • 前言 netty源碼分析之pipeline(一)中,我們已經(jīng)了解了pipeline在netty中所處的角色,像是一...
    簡書閃電俠閱讀 16,302評論 15 35
  • (*文章基于Netty4.1.22版本)ctx.writeAndFlush相當(dāng)于先調(diào)用ctx.write然后再調(diào)用...
    _六道木閱讀 685評論 0 0
  • [TOC] > 從JDK NIO文檔可以看到,Java將其劃分成了三大塊:Channel,Buffer以及Sele...
    Ever_00閱讀 1,213評論 0 3
  • 8月3日 晚 雨 最近過得很忙碌,浮現(xiàn)的想法更多的是:人活著很痛苦,如果沒有父母,沒有兄弟姐妹,感覺人生就沒有意義...
    大玲玲啊閱讀 257評論 0 0

友情鏈接更多精彩內(nèi)容