[英]TCP Java Socket custom timeouts not working only on docker
这段代码在我的机器默认操作系统上完美运行,但在 Docker 中却没有,我没有找到任何关于它的文档。
clientSocket = new Socket();
SocketAddress sockaddr = new InetSocketAddress(propertyFile.getProperty("tcp.pod.ip"),
Integer.parseInt(propertyFile.getProperty("tcp.pod.port")));
clientSocket.connect(sockaddr, 150);
clientSocket.setTcpNoDelay(true);
在 docker 中不起作用的部分是 clientSocket连接超时(第二个参数),它采用默认超时而不是我传递给他的超时。 其他一切都完美无缺。
我们已经测试了几个月,但遥测只是从我们的操作系统通过两个接入点到原型,所以如果因为原型死了而没有收到确认,我会看到它(我们用它来查看是否有通信)
使用 docker,操作系统和 docker 引擎之间有一个代理,因此您会看到始终存在连接,因为 ack 总是从容器到达操作系统套接字。
在应用层实现keep alive的解决方案(你不能在协议层这样做)。
这篇文章更好地解释了它: 找出是否通过 tcp 传递了一条消息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.