0%

微信网页版 聊天原理

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**

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

待看

  • 网页微信的封装,直接在 Electron 里加载微信的网页版,并向其中注入一些代码

  • 网页版微信抓包+注入实现表情贴纸显示

  • 微信网页版的 JavaScript 实现,兼容Node和浏览器,微信机器人

  • 微信网页版的 Python 实现,包含终端版微信及微信机器人

  • 微信抢红包插件–基于安卓

  • 微信聊天功能使用了什么协议?

原理 教程

  • 基于TLS1.3的微信安全通信协议mmtls介绍.—by 微信员工

疑问

为什么不采用websocket?

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