【发布时间】:2014-01-25 09:03:30
【问题描述】:
我有一个 SPA 应用程序(客户端上的主干和服务器上的 node.js)。双向的所有通信都是通过 websockets 进行的。现在我想知道 - 这是个好主意吗?之前的做法有什么缺点:客户端通过REST API向服务器发送数据,服务器通过websockets向客户端发送数据?
谢谢。
更新:
无论如何我都有 websocket,因为我的应用是多房间聊天。
【问题讨论】:
我有一个 SPA 应用程序(客户端上的主干和服务器上的 node.js)。双向的所有通信都是通过 websockets 进行的。现在我想知道 - 这是个好主意吗?之前的做法有什么缺点:客户端通过REST API向服务器发送数据,服务器通过websockets向客户端发送数据?
谢谢。
更新:
无论如何我都有 websocket,因为我的应用是多房间聊天。
【问题讨论】:
即使您只考虑 RPC(“远程过程调用”),REST 的能力也不如 WebSocket。
REST,因为它通过 HTTP 运行,所以不能通过管道传输 RPC。每个 HTTP 连接只能同步服务 1 个 RPC。并且浏览器会限制到给定源的并行 HTTP 连接数。
使用 RPC over WebSocket,您可以通过管道触发 100 个 RPC,并在 RPC 返回时异步处理它们。
然后,使用 WebSocket,您也可以拥有服务器启动的通知。例如。您可以拥有完整的发布和订阅。
WAMP(“Web 应用程序消息传递协议”)运行在 WebSocket 之上,专门为此而设计:SPA 需要 1 个协议中的 2 种消息传递模式 - RPC 和 PubSub。
免责声明:我是 WAMP 的原作者,为 Tavendo 工作。
【讨论】:
如果服务器需要不确定的时间来准备数据,这可能是个好主意 基本上没有理由将 websocket(socket.io) 用于 REST API。
由于 REST API 代表什么,您不必保持连接稳定,也不必等待广播服务器等某人的操作。
编辑回答评论
即使你已经用过websocket,也不代表你不能处理正常的req/res。
带有 websocket 的 RESTapi 就像
获取请求 -> 服务器响应 -> 客户端尝试 io.connect(); -> 建立连接 -> 服务器通过 websocket 向客户端发送数据
和普通的 REST API 一样
获取请求 -> 服务器响应
你选哪个?
【讨论】: