加入收藏 | 设为首页 | 会员中心 | 我要投稿 广元站长网 (https://www.0839zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

巧用or关键字实现多重条件判断

发布时间:2021-01-27 15:27:40 所属栏目:外闻 来源:互联网
导读:接下来本文将从长连接的重连和未达消息重发两个方面详细讲述我们是如何优化在线通道稳定性的。 长连接重连 长连接为什么会中断? 百因必有果,我们先来分析下有哪些原因会导致连接中断,可能有以下原因: 用户设备断网 设备发生了网络切换 设备处于弱网环境,

接下来本文将从长连接的重连和未达消息重发两个方面详细讲述我们是如何优化在线通道稳定性的。

长连接重连

长连接为什么会中断?

百因必有果,我们先来分析下有哪些原因会导致连接中断,可能有以下原因:

  • 用户设备断网
  • 设备发生了网络切换
  • 设备处于弱网环境,网络不稳定
  • 设备网络正常,TCP连接由于NAT超时导致连接被运营商中断

如果是用户操作导致网络状态变化的情况,会有网络状态变化事件通知,这种情况可以监听事件并主动尝试重连,但现实中的大多数情况都是“意料之外”。那么如何有效感知到各种异常状况呢?

心跳检测

像大多数探活场景一样,最有效的检测手段就是心跳检测,客户端通过定时发送心跳包,可以感知到连接中断,从及时性效果来看,心跳间隔越短越好,而频繁的心跳检测势必会带来用户流量以及电量的损耗,所以我们的目标是如何尽可能少的心跳检测而又尽量及时地感知到长连中断的意外情况。

状态机+消息心跳队列:
 

我们可以看到,定时任务SQL对主键加锁顺序是5,4,3,2。客服批量取消订单SQL对主键加锁顺序是2,3,5。当第一个SQL对3加锁后,正准备对2加锁时,发现2已经被第二个SQL加锁了,所以第一个SQL要等待2的锁释放。

而此时第二个SQL准备对3加锁,却发现3已经被第一个SQL加锁了,就要等待3的锁释放。两个SQL互相等待对方的锁,也就发生了“死锁”。

解决办法就是从SQL语句上保证加锁顺序一致。或者把客服批量取消订单SQL改成每次SQL操作只能取消一个订单,然后在程序里多次循环执行SQL,如果批量操作的订单数量不多,这种笨办法也是可行的。

故障七:域名劫持

先看看DNS解析是怎么回事,当我们访问www.baidu.com时,首先会根据www.baidu.com到DNS域名解析服务器去查询百度服务器对应的IP地址,然后再通过http协议访问该IP地址对应的网站。

而 DNS劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS)或者伪造域名解析服务器,把目标网站域名解析到其他的IP。从而导致请求无法访问目标网站或者跳转到其他网站。如下图:

(编辑:广元站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读