gpt4 book ai didi

java - 如何在网络中断时继续在 websockets 中发送消息?

转载 作者:行者123 更新时间:2023-11-30 10:36:51 24 4
gpt4 key购买 nike

我正在使用 websockets(org.java_websocket) 的 java 实现。我正在使用“ifconfig l0 down”来模拟网络故障。我希望服务器即使在网络中断时也能继续发送消息,并在网络再次启动时重新发送它们(通过 tcp 机制)。但是java实现在send函数中有如下检查

private void send( Collection<Framedata> frames ) {
if( !isOpen() )
throw new WebsocketNotConnectedException();

导致

an error occured
close a stream
Exception in thread "main" org.java_websocket.exceptions.WebsocketNotConnectedException

一旦我模拟服务器和客户端之间的连接丢失。

由于我没有正确调用 websockets 中的 close() 函数,我觉得 TCP 机制应该在超时导致 websockets 层关闭连接之前工作一段时间。我是在期待什么吗?是否有可以帮助我的实现?

最佳答案

通过ifconfig down 模拟网络连接问题不是一个好主意,因为操作系统知道接口(interface)状态。然后操作系统可能(并且确实)以不同方式处理连接错误和接口(interface)错误,并且网络应用程序获得不同的错误指示。

如何在 linux 机器上模拟连接错误的选项是 iptables。假设您的应用程序使用端口 80。您可以通过

丢弃所有进出端口 80 的通信
iptables -A INPUT -p tcp --destination-port 80 -j DROP
iptables -A OUTPUT -p tcp --source-port 80 -j DROP

iptables 中的流量下降就像网络中断一样处理。

关于java - 如何在网络中断时继续在 websockets 中发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40416586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com