我正在尝试在 Netty 中实现基本的多客户端聊天,但我陷入了困境!代码是:
public class Server {
public static void main(String[] args) throws Exception {
ChannelFactory factory =
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ServerBootstrap bootstrap = new ServerBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
return Channels.pipeline(new ServerHandler());
}
});
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.bind(new InetSocketAddress(8888));
}
}
public class ServerHandler extends SimpleChannelHandler {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
ChannelBuffer buf = (ChannelBuffer) e.getMessage();
Channel ch=e.getChannel();
while(buf.readable()) {
System.out.println((char) buf.readByte());
System.out.flush();
}
ch.write(e.getMessage());
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
e.getCause().printStackTrace();
Channel ch = e.getChannel();
ch.close();
}
}
我想先阅读消息然后发送/处理它!但是当我第一次读取然后处理消息时,messageReceived Event 中的代码不起作用,但如果我先发送然后从 channel 缓冲区读取,它的工作正常。无论如何,我是否首先读取并执行一些长时间操作,然后在完成该处理后,我将响应发送回客户端。我是一个 Java 新手,请引导我正确的方向,我也阅读了文档和一些教程,但我仍然想知道!
最佳答案
此外,对于聊天客户端,您似乎正在使用服务器端类:NioServerSocketChannelFactory
。我认为你需要 NioClientSocketChannelFactory
。
关于java - Netty 服务器事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257799/