我是使用rosjava这个包,客户端发送请求时得到的这个报错,偶发性,源码底层是netty写的3.5版本,具体报错是
nnectionTrackingHandler: Channel exception: java.nio.channels.ClosedChannelException
请假高手。
先排除客户端连接数量过多原因,因为就一个客户端最多两个;
排除客户端频繁发送的原因,程序开启关闭都要耗掉几秒;
有没有方向的。
我是使用rosjava这个包,客户端发送请求时得到的这个报错,偶发性,源码底层是netty写的3.5版本,具体报错是
nnectionTrackingHandler: Channel exception: java.nio.channels.ClosedChannelException
请假高手。
先排除客户端连接数量过多原因,因为就一个客户端最多两个;
排除客户端频繁发送的原因,程序开启关闭都要耗掉几秒;
有没有方向的。
ClosedChannelException表示你正在对一个已经关闭或者对你正在进行的操作已经关闭的通道上调用IO操作。抛出此这个并不一定意味着通道已完全关闭。
所以有两个方向:
(1) 客户端在编写消息之前关闭了连接。
(2) 服务器在阅读消息之前关闭了连接。
建议看一下客户端或者服务端的写方法 channel.write() 或 ctx.write(),这两个方法都将调用 AbstractUnsafe 的 write() 方法,调用这两个方法都会移动ByteBuf 索引。如果出站缓冲区为空,该方法可能会将 ClosedChannelException 设置为 promise。如果服务端关闭了连接,缓冲区可能会被清除。