1

服务器处理程序。对于每条收到的消息,都会有多个响应。业务逻辑涉及将请求放入队列、从队列中删除、处理请求和响应。

我如何异步处理请求,异步响应,同时保持队列的完整性?

下面的代码是同步运行的。

public class TestHandler extends SimpleChannelHandler {

    @Override
    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        // Send greeting for a new connection.
        e.getChannel().write(
                "Welcome to " + InetAddress.getLocalHost().getHostName() + "!\r\n");
        e.getChannel().write("It is " + new Date() + " now.\r\n");

    }

    @Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {      
        String XMLFromClient = (String) e.getMessage() ;

        ReadXML2 rx = new ReadXML2();
        String response = null;
        response = rx.processInput(XMLFromClient);
        ChannelFuture future = e.getChannel().write(response);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
        e.getCause().printStackTrace();
        Channel ch = e.getChannel();
        ch.close();
    } 
}
4

1 回答 1

1

在 netty 中写入始终是异步的,但写入同一通道的消息将按顺序排队。在阅读时,如果你想要异步操作,那么你需要添加一个ExecutionHandlerChannelPipeline. 如果排序很重要,则使用OrderedMemoryAwareThreadPoolExecutor实现。您需要将其添加到ChannelPipeline您自己的TestHandler. 新的Netty 4 API提供了对异步管道处理程序的更好控制,但它仍在开发中。

于 2012-11-07T18:16:33.890 回答