我正在运行Netty,我需要从客户端读取一些消息。 然后我需要在服务器中执行一些操作,然后向客户端发送响应。 也许客户需要再次回答服务器。 我认为这一切都必须在同一个线程中发生。 我怎么能在Netty服务器上这样做? 我使用Telnet测试下面的代码,但我无法从服务器获得响应。 如果我注释第一个块,(读取消息块),那么我开始在Telnet控制台中收到响应。
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) { // (2)
// Read the message sent from client.
try{
ByteBuf in = (ByteBuf) msg;
try {
while (in.isReadable()) { // (1)
System.out.print((char) in.readByte());
System.out.flush();
}
}
catch(Exception e){
System.out.println("---------------- Reading Exception ----------------");
e.printStackTrace();
}finally{
//ReferenceCountUtil.release(msg);
}
// treat the received message
if(msg.equals("teste")){
// do Something...
}
//Answer to the client
try {
ctx.write(msg); // (1)
ctx.flush(); // (2)
}
catch(Exception e){
System.out.println("---------------- Writing Exception ----------------");
e.printStackTrace();
}
}
finally {
//ReferenceCountUtil.release(msg); // (2)
}
}
答案 0 :(得分:0)
在while循环之后:while (in.isReadable()) {...}
,msg ByteBuf不再可读,因此不会通过ctx.write(msg)
将任何内容写入客户端