这两天兰州人的圈子都在盛传自己的微信被别人莫名登陆了,这里要说的是,别信!
先粗浅的说说通信协议,微信大概率是UDP和TCP两种协议都用的,但也有一种可能是微信在通讯中使用了HTTP短连接和TCP长连接,并没有用到UDP,其应用的场景是:登陆验证和头像身份信息等功能采用的HTTP,文本消息、语音消息、视频消息、图片消息这些使用的是TCP长连接。通过心跳包来维护长连接状态,300s一个心跳。
这里UDP和TCP的概念有点复杂,非专业人士可忽略这一段,直接看下文。
当然我们也不是腾讯,所以对他们的协议应用场景也只是推测,想深入了解的小伙伴也可以自行探索。
兰州人的疑惑主要来源于,通过微信—我—设置—账号与安全—登陆过的设备来查看,发现在这两天似乎莫名的出现了不是自己手动操作的登陆怀疑。
这个问题我们就以微信为安卓系统版本的后台应用为例来做个解释。
一般为了保证用户在使用微信应用时的稳定便捷性,微信会确保它的客户端在安卓手机后台的保活性,这个保活有两部分,一个是微信网络连接的保活,用以确保微信消息接收的实时性,另一个是微信应用进程的保活,用以尽量确保应用进程不被安卓系统回收。
我们先来看网络连接的保活。
这里的概念手段有很多,也较为专业,咱们挑保活手段的重点来理解,主要说明微信应用程序的心跳机制和长连接。
什么是心跳机制?就是微信应用程序会定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保程序连接有效性的机制。
什么是长连接?微信为了确保用户消息的实时性,通过长连接的手段来保证。
我们通俗的再啰嗦下,你手机上的微信客户端会定时给微信服务器后台发送一个心跳包,让服务器知道你的微信状态还在线,以确保服务器和你微信的有效连接。同时,为了确保你发送消息的实时性,微信还会通过长连接的方法来保证。
长连接的手段怎么确保我们消息的实时同步,有一个接口标准叫Sync CGI,翻译成中文就是同步接口标准,应用到微信上,就是你微信客户端和服务器后台的之间的数据同步标准。
微信会通过这个接口直接请求服务器的后台数据,同时比对后台数据值,判断该下发哪些消息,从而使你的微信消息发布和接收都处在实时最新的状态。
再来说说进程保活。
在安卓系统里,微信应用程序被终止的主要原因大概有系统回收内存、人为触发中止和手机自身读写执行权限三种。
目前,人为操作和手机读写执行权限造成的微信应用终止,微信没有做任何的特殊应对处理。
但对于系统回收内存情况造成的微信应用进程终止情况,会做一定保活处理。
好了,虽然说的不全面,但说到这里,看得懂看不懂的大概也都多少了解了微信为啥实时高效的原因。
也就是说,我们微信后台登陆过的设备里面出现的莫名登陆,并非莫名登陆。
举例,昨晚上半夜,你明明在熟睡中,但今天看微信后台,竟然出现了一条半夜登陆的记录,有些还不止一次,而是多次。
你开始纳闷啊,你并没有手动登陆,那么是谁登陆了你的微信呢?
其实,这不过是你的手机发现你的微信占用内存后自动回收内存终止了微信的在线状态,而微信为了保持消息的实时性,在识别了你的登陆设备没有变化确保是你登陆无疑后,自动拉起了微信应用与服务器数据的连接。
当然了,如果你觉得不信,你可以选择退出微信再试试看,在你退出和再次登陆的时间段内,肯定只有你自己人为操作的登陆记录。
我们大多数人的手机使用习惯是长时间不关机,对于微信也是,一般不会退出再登陆,所以微信被莫名登陆的恐慌,大可不必!
最后,本文综合参考网友@M&G @刘云 @杨干荣 真知灼见,在此致谢!
因招文袋公众号注册较晚,没有留言功能,如果大家还有疑问,欢迎点击本文右下角在看留言评论,我会在第一时间回应。