Java 在netty中,是否可以在同一tcp连接中获取多个请求?

Java 在netty中,是否可以在同一tcp连接中获取多个请求?,java,asynchronous,netty,nio,Java,Asynchronous,Netty,Nio,在netty中,当第一个请求正在进行时,可以从同一tcp客户端接收第二个请求 下面是我尝试过的示例代码: public class SomethingServerHandler extends SimpleChannelInboundHandler<Object> { protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception { String stringMe

在netty中,当第一个请求正在进行时,可以从同一tcp客户端接收第二个请求

下面是我尝试过的示例代码:

public class SomethingServerHandler extends SimpleChannelInboundHandler<Object> {
    protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
    String stringMessage = (String) msg;
    if (log.isDebugEnabled()) {
        log.debug(stringMessage);
    }
    ctx.fireChannelRead(msg);
    String[] splitMessage = stringMessage.split("::");
    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    if ( splitMessage.length != 2 ) {
        ctx.channel().writeAndFlush(stringMessage + "\n\r");
        return;
    }
    if ( channelRepository.get(splitMessage[0]) != null ) {
        channelRepository.get(splitMessage[0]).writeAndFlush(splitMessage[1] + "\n\r");
    }       
}
公共类SomethingServerHandler扩展了SimpleChannelInboundHandler{
受保护的无效channelRead0(ChannelHandlerContext ctx,对象消息)引发异常{
字符串字符串消息=(字符串)消息;
if(log.isDebugEnabled()){
log.debug(stringMessage);
}
ctx.fireChannelRead(msg);
String[]splitMessage=stringMessage.split(“:”);
试一试{
睡眠(10000);
}捕捉(中断异常e){
e、 printStackTrace();
}
if(splitMessage.length!=2){
ctx.channel().writeAndFlush(stringMessage+“\n\r”);
返回;
}
if(channelRepository.get(splitMessage[0])!=null){
channelRepository.get(splitMessage[0]).writeAndFlush(splitMessage[1]+“\n\r”);
}       
}
从命令行: telnet本地主机端口

string1

string2

在服务器端,string1处理完成后,string2将在10秒后打印。我是否可以并行处理string2


提前感谢您的帮助。

仅当您将工作卸载到另一个线程时。您正在阻止
EventLoop
,这意味着它的线程上不会发生任何其他工作。这不仅会影响此连接,而且会影响由同一
EventLoop

处理的所有其他连接。我的用例是request-response model,在响应之间,用户可以发送另一个请求。如果我将工作卸载到另一个线程,我将如何获得响应?抱歉,我是netty的新手,正在探索netty是否支持此模型。我猜您也可以将通道传递给handler线程并通过该通道写入响应。这种方法有效。谢谢!!!我正在查看内部netty使处理程序非阻塞。没有想到这个替代方法。ExecutorService executor=Executors.newFixedThreadPool(5);executor.submit(()->{try{Thread.sleep(10000);}catch(InterruptedException e){e.printStackTrace();}if(splitMessage.length!=2){ctx.channel();