知识卡片
HTTP 写请求加 WebSocket 推送的双通道网络架构
内容
联网对战这类需要”我主动发一个动作”和”对方的动作要能实时推给我”两种通信方向的场景,单靠 HTTP 请求-响应模式不够:HTTP 天然适合客户端主动发起、服务器返回一次结果的场景(登录、提交走棋数据),但服务器没法在没有请求的情况下主动把”对方走了一步”推给客户端。做法是两条通道分工:走棋、登录这类客户端主动发起的操作走 HTTP;服务器要主动告知客户端的事件(对方走棋了、匹配成功了、对方同意悔棋了)走一条常驻的 WebSocket 长连接。两条通道通过一个 client_id 关联起来——建立 WebSocket 连接后服务器分配一个临时 id,客户端再把这个 id 和自己的用户 id 一起通过 HTTP 提交给业务服务器完成绑定,之后业务服务器处理完某个用户的请求后,就知道该往哪条 WebSocket 连接推送通知。这是”请求-响应”和”发布-订阅”两种通信模型按各自擅长的方向组合使用的典型架构。
参考来源
《Swift全解析:新式iOS实战开发》第24章《卡牌斗兽棋》