WebSocket
Real-time
API
Mobile
Chat
Comunicação

WebSocket 应用:实时通信

WebSocket 允许客户端和服务器之间持续的双向通信。聊天、实时通知、游戏,WebSocket 是基础。本指南展示了如何在移动应用程序中实现它。

什么是 WebSocket

定义

基于 TCP 的全双工通信协议。

与 HTTP

HTTP:请求/响应。 WebSocket:持久连接。

使用 80/443(ws:// 和 wss://)。

双向

服务器无需请求即可发送给客户端。

何时使用

聊天

即时通讯。

通知

实时更新。

合作

多用户编辑。

游戏

同步状态。

仪表板

实时指标。

物联网

与设备通信。

它是如何工作的

握手

从 HTTP 升级到 WebSocket。

连接

已建立持久连接。

框架

数据以帧形式发送。

###关闭

优雅的结束。

后端实现

Node.js

ws,Socket.io。

###Python

websocket、Django 频道。

大猩猩 WebSocket。

红宝石

动作电缆(导轨)。

托管

Pusher、Able、Firebase。

套接字.IO

这是什么

抽象 WebSocket 的库。

后备方案

轮询 WebSocket 是否不可用。

###房间

连接分组。

命名空间

逻辑分离。

活动

基于事件的 API。

移动实施

iOS

URLSessionWebSocketTask。红蜘蛛。

###安卓

OkHttpWebSocket。

反应本机

react-native-websocket,Socket.io 客户端。

颤动

web_socket_channel、socket_io_client。

连接管理

###重新连接

自动重新连接。

###心跳

乒乓球以维持生命。

状态

跟踪连接状态。

离线队列

断开连接时对消息进行排队。

身份验证

握手中的令牌

发送身份验证令牌。

验证

服务器在接受之前进行验证。

###刷新

令牌过期处理。

可扩展性

问题

持久连接会消耗资源。

粘性会话

用户始终在同一服务器上。

发布/订阅

Redis 用于服务器之间的通信。

负载均衡

支持 WebSocket 的第 7 层平衡器。

替代方案

服务器发送的事件 (SSE)

单向。服务器→客户端。

长轮询

使用 HTTP 进行实时模拟。

GraphQL 订阅

[GraphQL0下的 WebSocket。

Firebase 实时

托管解决方案。

详细用例

聊天

  • 持久连接
  • 打字指示器
  • 阅读收据
  • 存在

实时更新

  • 仪表板指标
  • 体育成绩
  • 股票价格
  • 饲料更新

多人游戏

  • 游戏状态同步
  • 球员位置
  • 行动广播

最佳实践

重连逻辑

指数退避。

###心跳

保持连接有效。

消息格式

JSON 或二进制。

压缩

整帧放气。

###安全

需要 WSS (TLS)。

调试

浏览器开发工具

网络选项卡显示帧。

wscat

用于测试的 CLI 工具。

日志记录

记录连接、断开连接、消息。

##性能

连接

每个用户的限制。

有效负载大小

最小化数据。

批处理

尽可能对消息进行分组。

###二进制

对于体积而言,比 JSON 更高效。

常见错误

不要重新连接

连接中断,应用程序崩溃。

内存泄漏

监听器未删除。

没有授权

无需 [身份验证1] 的连接。

忽略断开连接

不处理离线状态。

移动特定

背景

连接在后台关闭。

电池

持续连接会耗尽电池电量。

网络变化

WiFi → 蜂窝网络需要重新连接。

推送回退

当 WebSocket 不可用时使用推送。

结论

WebSocket 对于实时功能至关重要。实施稳健的重新连接、充分的[身份验证2]并考虑对移动电池的影响。在许多情况下,托管服务可以简化。

##常见问题解答

1) WebSocket 比轮询更好吗? 对于实时来说,是的。更少的开销。

2) Firebase 会取代 WebSocket 吗? 在很多情况下是的。它是托管的 WebSocket。

3) WebSocket 是否可以在移动后台工作? 有限。使用推送作为背景。

4) 服务器可以处理多少个连接? 这取决于。数千到数十万的调整。

5) WebSocket 还是 SSE? WebSocket 用于双向。 SSE 仅适用于服务器 → 客户端。

另请阅读

  • [应用后端:架构、技术和最佳实践3
  • [GraphQL 应用程序:实施指南4
  • [应用中的微服务:移动分布式架构5
  • [应用程序后端 - 扩展的良好实践6
  • [应用程序后端 - 初创公司的良好实践7
  • [应用架构:基础知识和基本模式8