微信网页版 聊天原理

Overview

微信网页版聊天,未采用websocket,而是基于long polling(长轮询)。

客户端消息发送

客户端消息接收(伪服务端推送)

  1. 客户端间隔性发送http请求(每隔)源码; beauty后的源码
  2. 服务端对该请求延时返回,强制建立长连接
  3. 当服务端有需要推送的消息,即时在已建立的长连接中返回http response
  4. 客户端收到response后,立即发送一个新的http request
  5. goto 2

客户端发送http request

客户端间隔性发送ajax请求

1
2
3
4
5
6
7
8
9
10
11
Request URL:https://webpush.wx.qq.com/cgi-bin/mmwebwx-bin/synccheck?
Referrer Policy:no-referrer-when-downgrade

# Query String Parameters
r:151**
skey:@crypt_d8e**
sid:a5ne**
uin:1709**
deviceid:e2387***
synckey:1_677803136|2_677803**
_:1517**

这是一个服务器端强制保持的长连接。

待看

原理 教程 - 基于TLS1.3的微信安全通信协议mmtls介绍.---by 微信员工

疑问

为什么不采用websocket?

websocket占用资源多?不安全?socket连接数限制?低端浏览器不支持?手机浏览器不支持? 知乎说,是因为懒