discord.com消息是如何投递的?其聊天架构设计原理是什么?
Discord 消息推送底层实现逻辑
- 核心下行推送链路:WebSocket 网关
Discord 网页端启动后会优先和网关服务建立持久 WebSocket 连接,所有服务器主动下发的数据(包括好友消息、频道通知、状态更新等)都通过这条链路传输,你主动发送消息的 POST 请求是单独的上行 HTTP 接口,和下行推送链路完全分离。
你没抓到对应 WS 流量的常见原因是打开网络面板的时间晚于 WS 连接建立时间,已经建立的连接默认不会在请求列表高亮显示,刷新页面重放流程后过滤「WS」类型请求即可找到网关连接,点击对应请求切换到「帧」标签页,就能看到所有推送的消息 payload,其中MESSAGE_CREATE类型的事件就是你收到的好友/频道新消息。 - 降级兼容方案:长轮询
当你的网络环境无法建立 WebSocket 连接(比如防火墙拦截、代理限制)时,Discord 会自动降级到长轮询模式:客户端会发起一个超时时间很长的 GET 请求到网关地址,服务器没有待推送消息时会一直挂住请求,直到有新消息或者请求超时才返回,客户端收到响应后会立刻发起下一次长轮询请求。这种请求和普通 HTTP 查询请求外观一致,只是等待响应的时间很长,很容易被忽略。 - WebRTC 使用场景说明
WebRTC 在 Discord 中仅用于语音、视频通话的实时流传输,文本类消息完全不会走 WebRTC 链路,因此你在 WebRTC 检查器中看不到相关内容属于正常情况。
内容的提问来源于stack exchange,提问作者Piyush
相关产品推荐
相关产品推荐

