正常用户登录成功后,会存在E连接和V连接。
1.初始: 由于要通过E进程实现实时防截屏和防二次跳转,所以E进程必须一直存在,当E进程不在时,必须把用户踢下线,不能让用户继续使用V业务,为了实现这个目的,设计了以下机制:
让E隔3s发一次保活报文,网关接收这个保活报文,在连续收不到保活报文时,在网关把用户的session老化掉。
2.优化:而为了防止网络丢包带来的影响,加上了连接休眠机制:
让E隔3s发一次保活报文,网关接收这个保活报文,在连续收不到这条连接的保活报文时,不直接把用户打上删除标志,而是把该用户(注意,这里是对用户,而不是这个E连接)打上休眠标志,用户打上休眠标志后将暂不再处理V连接的业务报文,同时把连接的老化时间修改为60s,如果后续收到保活报文时刷新老化时间并把休眠标志删除;如果在60s后老化检查时仍然没有收到保活报文,则才认为连接真正老化,此时才把用户的session老化掉。
在用户与网关只有一个EPS连接的时候,上述机制是没有问题的。
但是当用户与网关有两条以上E连接时,就会存在以下问题。
假设存在E连接A 和B两条连接,网关没有收到A的保活时,对用户打上休眠标志,并刷新老化间隔为60s,原意是延迟对保活报文检查的时间,但是,另外一条连接B的老化间隔还是10s,由于网关也没有收到B的连接,在B的10S后进入老化检查分支,检查到此时用户已经被打上了休眠标志,所以直接把用户老化掉,这样就造成了优化的效果完全没有了!!