2014-01-24 26 views
1

當我需要調用其中任何一個時,我是否需要預料到任何異常?Netty channel.write()或context.write()是否會拋出異常?

io.netty.channel.Channel.write(...) 
io.netty.channel.Channel.flush(...) 
io.netty.channel.Channel.writeAndFlush(...) 
io.netty.channel.ChannelHandlerContext.write(...) 
io.netty.channel.ChannelHandlerContext.writeAndFlush(...) 

看來不是。沒有檢查異常,沒有記錄,也沒有在任何示例代碼中看到任何try/catch塊。但我似乎無法明確地表明我的假設。

例如這不會引發任何異常:

ChannelFuture closeFuture = channel.close(); 
closeFuture.addListener(new ChannelFutureListener() { 
    @Override 
    public void operationComplete(ChannelFuture future) throws Exception 
    { 
     channel.writeAndFlush(msg); // No exception when writing to closed channel 
    }); 

即使通道被關閉的書面消息由所有下游處理程序處理,如同信道是開放的。別誤會我的意思;我對這種行爲非常滿意!我可以趕上channelInactiveexceptionCaught事件,很好地處理它們,我在乎的地方在於我可以傾聽成功的未來。

我只是想讓別人告訴我,Netty真的讓我寫I/O的東西沒有無盡的異常處理!我正在使用Netty 5.0.0.Alpha1。

謝謝!

回答

3

它不會拋出任何異常,但會通知返回的ChannelFuture關於操作的任何異常(或成功)。