185 Star 1.8K Fork 585

如梦技术 / mica-mqtt

 / 详情

客户端断电,等待心跳超时中服务端给客户端发送消息,会导致客户端的心跳时间刷新。

已完成
创建于  
2024-05-21 16:45

mica-mqtt版本

2.2.x

服务端还是客户端

mica-mqtt server 服务端

问题描述

版本是2.2.5,客户端断电,不会触发客户端掉线监听函数,此时服务端给客户端发送消息,会刷新客户端的心跳时间,导致此客户端一直不能触发心跳超时。

评论 (4)

HY 创建了任务
HY 修改了描述
HY 修改了描述
展开全部操作日志

此时发消息发不成功就会触发异常离线的,不会等到心跳

但是我发送了消息没有触发异常,qos设置的为0

我测试了下,拔掉网线,数据发送完全是成功的,所以没触发异常,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 栈检测到超时或连接失败。
服务器的套接字被关闭或关闭。

好的,谢谢

如梦技术 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
372 dreamlu 1578913784
Java
1
https://gitee.com/596392912/mica-mqtt.git
git@gitee.com:596392912/mica-mqtt.git
596392912
mica-mqtt
mica-mqtt

搜索帮助

344bd9b3 5694891 D2dac590 5694891