Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异步处理我收到的消息时Netty ClosedChannel异常_Netty - Fatal编程技术网

异步处理我收到的消息时Netty ClosedChannel异常

异步处理我收到的消息时Netty ClosedChannel异常,netty,Netty,当我收到一个新请求时,我将把这个MessageEvent放入LinkedBlockingQueue; 另一个线程正在运行以从这个LinkedBlockingQueue读取MessageEvent,因此我处理MessageEvent并写入客户端。但当我向客户机写入时,会发生异常 这是我的密码: @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { LogConsole.info(

当我收到一个新请求时,我将把这个MessageEvent放入LinkedBlockingQueue; 另一个线程正在运行以从这个LinkedBlockingQueue读取MessageEvent,因此我处理MessageEvent并写入客户端。但当我向客户机写入时,会发生异常

这是我的密码:

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    LogConsole.info(e.toString());
    messageReceivedQueue.addReceivedMessage(e);
}

public void run() {
   MessageEvent  e = messageReceivedQueue.get();       
   e.getChannel().write(e.getMessage());
}
以下是我得到的错误:

java.nio.channels.ClosedChannelException
    at org.jboss.netty.channel.socket.nio.NioWorker.cleanUpWriteBuffer(NioWorker.java:645)
    at org.jboss.netty.channel.socket.nio.NioWorker.writeFromUserCode(NioWorker.java:372)
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:137)
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:76)
    at org.jboss.netty.channel.Channels.write(Channels.java:632)
    at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:70)
    at org.jboss.netty.channel.Channels.write(Channels.java:611)
    at org.jboss.netty.channel.Channels.write(Channels.java:578)
    at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:251)
    at com.bankht.cis.tcs.service.executor.adapter.AbstractMessageAdapter$ProcessWorker.run(AbstractMessageAdapter.java:97)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

这告诉你,这条通道在此期间被关闭了。您对此无能为力,因为客户端可能会一直关闭套接字。

thks,您是对的。在我给客户写信之前,我发现频道已经关闭了。但是当我用messageReceived方法向客户端写入时,它会成功地发送到客户端。我很困惑。像这样@Override public void messagereceivedchannelhandlercontx,MessageEvent e{e.getChannel.writeresp:+e.getMessage.toString;}