2.2.x
mica-mqtt server 服务端
版本是2.2.5,客户端断电,不会触发客户端掉线监听函数,此时服务端给客户端发送消息,会刷新客户端的心跳时间,导致此客户端一直不能触发心跳超时。
此时发消息发不成功就会触发异常离线的,不会等到心跳
我测试了下,拔掉网线,数据发送完全是成功的,所以没触发异常,14:31:33 到 14:47:31 等了10多分钟才看到服务器上断开异常日志。
目前 mica-mqtt Server 和 Client 都不是完全严格的 ping、pong 消息时间进行的校验,暂时不会去调整,我感觉可以接受,毕竟这种场景出现比较少。下面是 ai 给回答:
Java AIO:Java AIO 设计用于提供异步 I/O 操作,这意味着发起 I/O 操作的线程不会阻塞等待操作完成。相反,操作将在后台执行,线程将在操作完成时被通知。
TCP/IP:当网络电缆被拔出时,Linux 服务器上的 TCP/IP 栈不会立即检测到断开连接。服务器将继续发送数据,假设连接仍然有效。
套接字缓冲区:当服务器发送数据时,它将被存储在套接字缓冲区中。即使网络电缆被拔出,数据仍然保留在缓冲区中,服务器将继续从缓冲区发送数据,直到缓冲区为空。
要触发端口错误或异常,服务器需要检测到连接不再有效。这可以在以下情况下发生:
服务器从客户端接收到错误响应(例如 TCP RST 数据包)。
服务器的 TCP/IP 栈检测到超时或连接失败。
服务器的套接字被关闭或关闭。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论