这段代码在我的机器默认操作系统上完美运行,但在 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连接超时(第二个参数),它采用默认超时而不是我传递给他的超时。其他一切都完美无缺。
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
我们已经测试了几个月,但遥测只是从我们的操作系统通过两个访问点到原型,所以如果因为原型死亡而没有收到确认,我会看到它(我们用它来查看是否有通信)
使用 docker,在操作系统和 docker 引擎之间有一个代理,所以你会看到总是有连接,因为 acks 总是从容器到达操作系统套接字。
在应用层实现keep alive的解决方案(在协议层不能实现)。
这篇文章更好地解释了它:找出是否通过 tcp 传递了一条消息
添加回答
举报
0/150
提交
取消