猿问

TCP Java Socket 自定义超时不仅仅适用于 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连接超时(第二个参数),它采用默认超时而不是我传递给他的超时。其他一切都完美无缺。


慕尼黑的夜晚无繁华
浏览 85回答 1
1回答

千巷猫影

我们已经测试了几个月,但遥测只是从我们的操作系统通过两个访问点到原型,所以如果因为原型死亡而没有收到确认,我会看到它(我们用它来查看是否有通信)使用 docker,在操作系统和 docker 引擎之间有一个代理,所以你会看到总是有连接,因为 acks 总是从容器到达操作系统套接字。在应用层实现keep alive的解决方案(在协议层不能实现)。这篇文章更好地解释了它:找出是否通过 tcp 传递了一条消息
随时随地看视频慕课网APP

相关分类

Java
我要回答