netty的誤區

     最近在基於netty做一些開發,程序基本都跑起來,發現有時偶發出現BlockingOperationException異常,通過連續跟蹤程序,基本定位點,但是居然該框架就是故意出錯,說不遵守netty的事件機制規則。原文是:

  An IllegalStateException which is raised when a user performed a blocking operation when the user is in an event loop thread. If a blocking operation is performed in an event loop thread, the blocking operation will most likely enter a dead lock state, hence throwing this exception.

   也就是說居然有可能出錯,那就讓你出錯。

   但是從sync/await提供的同步等待接口,就是希望能夠進行IO等待處理,結果它拋異常,等待就成了一句空話。

  總結一句話:在netty的IO線程之中不能使用sync/await接口,否則就會出現意外錯誤。


  對於目前這種事件響應的接口機制,爲了獲得同步調用,將需要通過共享一些變量達到要求,只能進行簡單同步封裝。初步考慮使用:

 實現一個ChannelFutureListener的實現類,裏面增加一個notify和wait對象,確保operationComplete 來獲得準確的發送狀態,通知外部狀態等候着。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章