繁体   English   中英

TCP Java Socket 自定义超时不仅适用于 docker

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM