我正在编写高负载client/server
应用程序。某些操作系统有些情况,当连接丢失时,但是netty不知道它(由于TCP/IP
协议没有ping)。所以我决定在我的应用程序级别实现连接ping。
然后我遇到了下一个问题:在服务器通过慢速网络连接向客户端发送过多消息的情况下,来自服务器的ping无法在合理的时间内到达客户端并返回(写缓冲区高水位标记相当大) ,几MB)。在这种情况下,服务器会断开连接,尽管它处于活动状态并且正常工作
所以我决定在ping时查看IO处理。所以我可以认为下一种情况正常:当ping超时时,来自服务器的字节仍在处理并写入套接字。
但是,在netty中看起来不可能将实际写入的字节计数到套接字并最后测量套接字写入时间,因为NioSocketChannel.doWrite(ChannelOutboundBuffer in)
没有任何回调。而且我不想通过覆盖NioSocketChannel doWrite方法来破解网络代码。
我使用的是netty 4.0.42。
感谢任何帮助!