Java Netty服务器没有';第一次连接后,无法接受连接

Java Netty服务器没有';第一次连接后,无法接受连接,java,netty,nio,Java,Netty,Nio,我在运行使用Netty的服务时遇到问题。它可以正常启动和工作,但只能启动一次。之后,不接受任何连接(它们会立即断开) 我有多个侦听器,每个侦听器只接受ony连接,之后就不可能连接到同一个侦听器 代码 这是我的监听器。java: 公共类侦听器 { /* ... */ 公开募捐 { //检查运行此侦听器是否有意义 if(this.address==null){ this.logger.info(“\”{}\”未启用连接,没有启动点。“,this.getName()); 返回; } final int

我在运行使用Netty的服务时遇到问题。它可以正常启动和工作,但只能启动一次。之后,不接受任何连接(它们会立即断开)

我有多个侦听器,每个侦听器只接受ony连接,之后就不可能连接到同一个侦听器

代码 这是我的
监听器。java

公共类侦听器
{
/* ... */
公开募捐
{
//检查运行此侦听器是否有意义
if(this.address==null){
this.logger.info(“\”{}\”未启用连接,没有启动点。“,this.getName());
返回;
}
final int maxPacketSize=this.getMaxPacketSize();
final ChannelHandler=new DispatcherHandler(this.context,this.dispatcher);
EventLoopGroup acceptors=新的NioEventLoopGroup();
EventLoopGroup workers=new NioEventLoopGroup();
试一试{
//网络服务配置
ServerBootstrap bootstrap=newserverbootstrap();
独自创立
.组(接受者、工人)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_REUSEADDR,true)
.handler(新的LoggingHandler(Listener.class))
.childHandler(新的通道初始值设定项(){
@凌驾
公共频道(频道)
{
//网络服务配置
channel.pipeline().addLast(
新的LoggingHandler(handler.getClass()),
新的LineBasedFrameDecoder(maxPacketSize),
新的字符串解码器(StandardCharsets.UTF_8),
新的字符串编码器(StandardCharsets.UTF_8),
处理者
);
}
});
//启动服务器
this.channel=bootstrap.bind(this.address).sync().channel();
this.logger.info(“已启动”);/(1)
//等待通道关闭
this.channel.closeFuture().sync();
this.logger.info(“已停止”);/(2)
}捕获(中断异常错误){
//别担心,事实上这是我们想要的
this.logger.error(“中断”);/(3)
//CHECKSTYLE:OFF:IllegalCatchCheck
}捕获(可丢弃错误){
//CHECKSTYLE:ON:IllegalCatchCheck
//这是预料不到的
this.logger.error(“IO连接错误:{}.”,error.getMessage());/(4)
}最后{
this.logger.info(“正在完成”);/(5)
this.channel=null;
//密切联系
接受者。优雅地关机();
工人们。优雅地关机();
this.logger.info(“完成”);/(6)
}
}
}
DispatcherHandler.java

公共类DispatcherHandler扩展ChannelInboundHandlerAdapter
{
/* ... */
@凌驾
public void exceptionCaught(ChannelHandlerContext会话,可丢弃错误)
{
这是一个错误(
“会话ID{}:连接扩展。”,
session.name(),
错误
);
writeAndFlush(新的JSONRPC2Response(JSONRPC2Error.INTERNAL_ERROR,null));
session.close();
}
@凌驾
public void channelRead(ChannelHandlerContext会话,对象消息)
{
JSONRPC2Response=null;
试一试{
//解析请求
JSONRPC2Request-request=JSONRPC2Request.parse(message.toString());
//发送它
试一试{
response=this.dispatcher.dispatch(请求,this.context);
//CHECKSTYLE:OFF:IllegalCatchCheck
}捕获(可丢弃错误){
//CHECKSTYLE:ON:IllegalCatchCheck
//我们确实希望捕获所有异常,以避免侦听器线程死亡
this.logger.error(“内部错误”,error);
response=新的JSONRPC2Response(
JSONRPC2Error.INTERNAL_ERROR.appendMessage(“:”+ERROR.getMessage()+”),
request.getID()
);
}
}捕获(JSONRPC2ParseException错误){
response=新的JSONRPC2Response(JSONRPC2Error.PARSE_ERROR,null);
this.logger.error(“无法解析JSON-RPC请求”);
}
//向客户端发送响应
session.writeAndFlush(response.toJSONString());
}
}
(我知道有些东西是可以简化的,这是一个快捷版本,仍然可以重现这个问题)

第一届会议 当我第一次使用
nc localhost 6000
(示例端口,无论什么)连接到服务器时,一切正常:

客户端会话:

rafal.wrzeszcz@devel0:~$ nc -vv localhost 6000
localhost [127.0.0.1] 6000 (?) open
test
{"id":null,"error":{"code":-32700,"message":"JSON parse error"},"jsonrpc":"2.0"}^C
rafal.wrzeszcz@devel0:~$
rafal.wrzeszcz@devel0:~$ nc -vv localhost 6000
localhost [127.0.0.1] 6000 (x11) open
 sent 0, rcvd 0
rafal.wrzeszcz@devel0:~$
服务器日志:

10:45:37.036 [nioEventLoopGroup-3-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0xd8fbf0ce, /0:0:0:0:0:0:0:0:6000] RECEIVED: [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000]
10:45:37.056 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] REGISTERED
10:45:37.056 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] ACTIVE
10:45:39.285 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] RECEIVED: test
10:45:39.293 [nioEventLoopGroup-11-1] ERROR pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - Could not parse JSON-RPC request.
10:45:39.294 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] WRITE: {"id":null,"error":{"code":-32700,"message":"JSON parse error"},"jsonrpc":"2.0"}
10:45:39.297 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] FLUSH
10:45:40.066 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 :> /172.17.0.2:6000] INACTIVE
10:45:40.067 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 :> /172.17.0.2:6000] UNREGISTERED
10:45:40.539 [nioEventLoopGroup-3-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0xd8fbf0ce, /0:0:0:0:0:0:0:0:6000] RECEIVED: [id: 0x9e3dc0b1, /172.17.0.1:56487 => /172.17.0.2:6000]
10:45:40.545 [nioEventLoopGroup-11-2] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0x9e3dc0b1, /172.17.0.1:56487 :> /172.17.0.2:6000] INACTIVE
10:45:40.547 [nioEventLoopGroup-11-2] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0x9e3dc0b1, /172.17.0.1:56487 :> /172.17.0.2:6000] UNREGISTERED
(不要担心JSON-RPC错误,这是逻辑错误,在正确的请求和响应下,它的工作方式完全相同)

第二届会议 但是在我关闭客户端连接之后,就不可能再连接了

客户端会话:

rafal.wrzeszcz@devel0:~$ nc -vv localhost 6000
localhost [127.0.0.1] 6000 (?) open
test
{"id":null,"error":{"code":-32700,"message":"JSON parse error"},"jsonrpc":"2.0"}^C
rafal.wrzeszcz@devel0:~$
rafal.wrzeszcz@devel0:~$ nc -vv localhost 6000
localhost [127.0.0.1] 6000 (x11) open
 sent 0, rcvd 0
rafal.wrzeszcz@devel0:~$
服务器日志:

10:45:37.036 [nioEventLoopGroup-3-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0xd8fbf0ce, /0:0:0:0:0:0:0:0:6000] RECEIVED: [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000]
10:45:37.056 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] REGISTERED
10:45:37.056 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] ACTIVE
10:45:39.285 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] RECEIVED: test
10:45:39.293 [nioEventLoopGroup-11-1] ERROR pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - Could not parse JSON-RPC request.
10:45:39.294 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] WRITE: {"id":null,"error":{"code":-32700,"message":"JSON parse error"},"jsonrpc":"2.0"}
10:45:39.297 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 => /172.17.0.2:6000] FLUSH
10:45:40.066 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 :> /172.17.0.2:6000] INACTIVE
10:45:40.067 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb89181bd, /172.17.0.1:56485 :> /172.17.0.2:6000] UNREGISTERED
10:45:40.539 [nioEventLoopGroup-3-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0xd8fbf0ce, /0:0:0:0:0:0:0:0:6000] RECEIVED: [id: 0x9e3dc0b1, /172.17.0.1:56487 => /172.17.0.2:6000]
10:45:40.545 [nioEventLoopGroup-11-2] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0x9e3dc0b1, /172.17.0.1:56487 :> /172.17.0.2:6000] INACTIVE
10:45:40.547 [nioEventLoopGroup-11-2] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0x9e3dc0b1, /172.17.0.1:56487 :> /172.17.0.2:6000] UNREGISTERED
--编辑--

网络版:4.0.33.最终版

--编辑2--

只要连接处于活动状态,服务器就可以正常工作——在关闭连接之前,我可以不间断地交换请求/响应

不要被IP地址弄糊涂,它是一个转发到Docker的本地端口,应用程序就是在这里启动的。这应该不是问题,我已经用同样的方式运行了ApacheMina应用程序,并尝试将其移植到Netty

--编辑3--

应用注释中的更改后 客户 附加消息后的服务器日志: 一切都是一样的,直到我按下
[CTRL]+[C]
,父频道才关闭:

12:05:53.720 [chilldev.pl-frontend] INFO  pl.chilldev.commons.jsonrpc.daemon.Listener - Started.
12:05:58.075 [nioEventLoopGroup-6-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0x7cbe3265, /0:0:0:0:0:0:0:0:6000] RECEIVED: [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000]
12:05:58.095 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] REGISTERED
12:05:58.096 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] ACTIVE
12:06:02.122 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] RECEIVED: test
12:06:02.129 [nioEventLoopGroup-11-1] ERROR pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - Could not parse JSON-RPC request.
12:06:02.129 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] WRITE: {"id":null,"error":{"code":-32700,"message":"JSON parse error"},"jsonrpc":"2.0"}
12:06:02.132 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] FLUSH
12:06:03.414 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] RECEIVED: test
12:06:03.415 [nioEventLoopGroup-11-1] ERROR pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - Could not parse JSON-RPC request.
12:06:03.416 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] WRITE: {"id":null,"error":{"code":-32700,"message":"JSON parse error"},"jsonrpc":"2.0"}
12:06:03.416 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 => /172.17.0.2:6000] FLUSH
12:06:04.091 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 :> /172.17.0.2:6000] INACTIVE
12:06:04.091 [nioEventLoopGroup-11-1] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0xb284a0b1, /172.17.0.1:57853 :> /172.17.0.2:6000] UNREGISTERED
12:06:07.923 [nioEventLoopGroup-6-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0x7cbe3265, /0:0:0:0:0:0:0:0:6000] RECEIVED: [id: 0x0def7d2a, /172.17.0.1:57856 => /172.17.0.2:6000]
12:06:07.932 [nioEventLoopGroup-11-2] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0x0def7d2a, /172.17.0.1:57856 :> /172.17.0.2:6000] INACTIVE
12:06:07.933 [nioEventLoopGroup-11-2] DEBUG pl.chilldev.commons.jsonrpc.netty.DispatcherHandler - [id: 0x0def7d2a, /172.17.0.1:57856 :> /172.17.0.2:6000] UNREGISTERED
^C12:08:25.329 [Thread-14] INFO  pl.chilldev.commons.jsonrpc.daemon.AbstractApplication - Stopping…
12:08:25.335 [nioEventLoopGroup-6-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0x7cbe3265, /0:0:0:0:0:0:0:0:6000] CLOSE()
12:08:25.337 [chilldev.pl-frontend] INFO  pl.chilldev.commons.jsonrpc.daemon.Listener - Stopped.
12:08:25.337 [nioEventLoopGroup-6-1] DEBUG pl.chilldev.commons.jsonrpc.daemon.Listener - [id: 0x7cbe3265, /0:0:0:0:0:0:0:0:6000] UNREGISTERED
12:08:25.337 [chilldev.pl-frontend] INFO  pl.chilldev.commons.jsonrpc.daemon.Listener - Finalizing.
12:08:25.345 [chilldev.pl-frontend] INFO  pl.chilldev.commons.jsonrpc.daemon.Listener - Done.
  • 已记录,服务器正在运行