太棒了 |
引用:袁凯明 发表于 2021-01-23 22:56 1、客户端一般会有断线自动重连机制,客户端在判定到断线时,都在同一时刻启动重连(一般的做法是给客户端一个随机的重启启动时间,这样就不会都在同一时刻启动)。 2、3:客户端在有心跳算法的情况下,是可以自行判定连接不可用的。 |
如何理解以下问题? 1.网络抖动,会导致所有客户端的网络断掉吗?客户端怎么会立即同时向服务端发起连接? 2.上层应用无法改变只能由服务器发起断开连接这种协议层面的规则,客户端不能直接发起断开连接的请求吗? 3.在上层通过业务逻辑保证旧连接完全失效,模拟连接断开,然后在发起新连接,恢复通讯。上层如何通过业务逻辑保证旧连接完全失效,如何模拟连接断开? |
引用:ym_im 发表于 2020-08-28 14:25 你这个做法,有个专业的叫法:“轮询”,如果你的实时性要求不需要太高的话,轮询是很经济适用的,成本又低,技术又简单。 |
引用:JackJiang 发表于 2020-08-27 15:19 那订阅消息或者渠道消息。就是比如某个企业开始直播了。这个企业下面的所有员工都能收到一条企业开播的消息。可能这个企业人特别多达到几万人。这个消息虽然实时性要求不高,但是也不能太慢。 -------------------------------------------------------------------------------------------------------------------------------- 我目前是在客户端的心跳中包含自己的订阅号。每次心跳到服务器,服务器从cache里面查一下,有没有 新的订阅消息。 这个做法怎么样。还是有新的订阅消息了。直接遍历发送给这个企业的所有人 |
引用:ym_im 发表于 2020-08-27 14:19 理想测试下是的,但事件通知只是个通知,极端情况下并不能保证你的app一定就能收到,你可以自已写套算法试试看。心跳是主流做法,你不需要去纠结,因为这是大家都趟过坑后的实践总结。 另外,这一篇文章你可以看看:《为什么说基于TCP的移动端IM仍然需要心跳保活?》 |
引用:JackJiang 发表于 2020-08-27 14:15 心跳间隔事件短费电,时间长体验不好。 手机wifi切换4g、5g、或者4g、5g切换手机wifi,这些事件,app是不是都可以获取到 |
引用:ym_im 发表于 2020-08-27 13:58 只有自已做心跳是最靠谱的。默认的tcp协议实现中,客户端到服务端间的路由这么多跳,随便一个环节出故障,你的这条tcp连接也是无法感知的(也就是没法知道是否已经断开),只有自已在应用层做心跳是最好的方法。 |
引用:JackJiang 发表于 2020-08-26 22:15 手机客户端使用 epoll 监听 socekt,正常服务器断开客户端可以获取断开事件,但是如果客户端断网等情况,客户端没有监听到事件,有什么好办法快速解决获取断开状态吗 |
引用:ym_im 发表于 2020-08-26 18:21 确实没有更好的办法,够用就行了。 |
引用:ym_im 发表于 2020-08-26 18:21 同时让上层在wifi或者流量切换后。直接调用重连接口 |
都是干货啊。我简单写了退避算法。就是起始重连间隔,最大重连时间间隔,每次递增间隔。这三个值都是服务器返回给客户端的。不知道有没有其他更好的方法 |
引用:Fly463061655 发表于 2020-08-19 13:53 如果是android的话,是有系统网络事件的。但ios或普通的pc端(ios端有个官方的Reachability演示,具体看看这个帖子:https://www.cnblogs.com/sunfuyou/p/6838609.html),基本就是只能自已额外写网络探测逻辑。 |
"网络状态由offline变为online" 文中一直提到的这种状态变化事件,是如何得知的 |
这篇文章真的不错, 很少见到这种一手干货了,赞群主整理分享 |