0

新しいリクエストを受け取ったら、これMessageEventLinkedBlockingQueue;に入れます。MessageEventthisから読み取るために別のスレッドが実行されているLinkedBlockingQueueため、 を処理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)
4

1 に答える 1

0

これは、チャネルがその間に閉じられたことを示しています。クライアントが常にソケットを閉じている可能性があるため、これについてできることはあまりありません。

于 2012-05-04T08:33:10.767 に答える