微信网页版 聊天原理

Overview

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

客户端消息发送

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

  1. 客户端间隔性发送http请求sync(每隔)源码; 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**

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

待看

疑问

为什么不采用websocket?

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