我使用Netty 4.1.0.beta3创建了websocket服务器它基于Netty存储库的示例,但我使用共享执行程序(预定的单线程执行程序):
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup(1, executor);
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new WsServerInitializer(this));
b.bind(port);
同样WsServerInitializer
类似于netty repo:
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new HttpObjectAggregator(65536));
pipeline.addLast(serverHandler);
}
主要问题是服务器经常(并非总是)保持连接状态。我检查控件是否转到LoggingHandler.channelRead()
,然后我的serverHandler
被添加到ServerBootstrap.channelRead()
中的管道中。但在此之后,channelRegisterd()
中的任何channelActive()
,channelRead()
,serverHandler
都不会被调用。两个网络线程都在运行,NioEventLoop.run()
正在处理某些任务。当工作循环组收到自己的线程时,问题消失。我的问题是:我该如何调试它?我只是不知道从哪里开始。有什么建议吗?