默认
发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教基于websocket写的im中,心跳该谁发ping(客户端还是服务端?)
阅读(43431) | 评论(7 收藏 淘帖1 1
IM。 websocket心跳设计。  谁先主动发ping。   客户端发,然后服务端回复pong?然后两边做超时检测?   还是服务端主动发ping,客户端回复pong。   另外是自己应用层自己做心跳,还是直接用ws的ping/pong帧。  各自有啥优缺点

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:消息队列IMMQ_QUEUE_APP2WEB = "burnAfterReading"下一篇:IM中群聊写扩散如何保证写用户timeline的顺序性?

本帖已收录至以下技术专辑

推荐方案
评论 7
引用:JackJiang 发表于 2022-03-10 18:11
一般来说都是客户端主动一起心跳包(也就是WebSocket里所谓的Ping包)。
对于客户端来说,它自已能知道自 ...

服务端发的我也见过,但好像客户端主动发的多。  有啥优缺点呢
引用:ykpeng 发表于 2022-03-10 18:20
服务端发的我也见过,但好像客户端主动发的多。  有啥优缺点呢

看来你真的看懂我的回答。你只要记住客户端主动发是绝大多数场景下的最佳实践就对了
引用:ykpeng 发表于 2022-03-10 18:20
服务端发的我也见过,但好像客户端主动发的多。  有啥优缺点呢

服务端发更加麻烦. 要开超级多的定时任务, 会增加服务端的压力
一般双方都可以进行pingpong,但通常来说,基于cs也好bs也罢,都是由服务端发起ping 客户端进行pong,服务端发起的ping 如果没回应 比如5次 服务端可以主动断开客户端,相反由client发起ping 的话,如果client异常断开 如停电,非法关机或非法关闭进程 那服务端岂不是一直认为客户端在线。相反 服务端发起 如果没响应 那就可以主动的将服务端的客户句柄抹掉。。这里不清楚你的设计的架构,当然你也可以客户端发起,但是更多的还要在服务端设计,否则就会引起各种问题。
引用:qq010101 发表于 2022-12-21 21:10
一般双方都可以进行pingpong,但通常来说,基于cs也好bs也罢,都是由服务端发起ping 客户端进行pong,服务 ...

你的项目是真的由服务端发起ping,还是只是个理论构想
引用:qq010101 发表于 2022-12-21 21:10
一般双方都可以进行pingpong,但通常来说,基于cs也好bs也罢,都是由服务端发起ping 客户端进行pong,服务 ...

服务端发起的话,对于每个链接是否需要设置独立的心跳发送定时任务呢?还说只用一个统一的定时任务?如果是客户端发起,服务不需要维护大量定时器就可以做到每个链接有独立的心跳间隔,只要记录每次心跳的时间,定时清理超时链接就可以很好得做到关闭无用的链接了,实践起来应该要比服务端发起心跳要简单,逻辑上也更加说得通一点
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部