异步RestFul与Websocket的区别

3
我正在实现一个带有长时间作业处理(一些情况下需要几分钟)的客户端 - 服务器API。其中一些api调用是短暂的并立即回应,但有些需要后端处理。我正在使用node.js作为Web服务器。我的当前实现方式如下 -
客户端(浏览器) <-> node js <-> 引擎
引擎是一个后端进程,处理每个作业 (C++代码)。所有交互都是http。现在,传统上我会将长时间的作业实现为异步ajax/restful请求,并将短时间的作业实现为同步restful 请求。
我要对长时间处理任务进行状态更新(处理大量数据),例如中间结果、完成百分比等。
我正在考虑WebSocket作为一种替代方案(而我相对来说是新手)。以下是我的问题 -
1.我是否应该考虑使用WebSocket替代异步RESTful API来处理长时间作业(我非常希望避免处理客户端超时、长轮询等)?
2.将所有请求转移到WebSocket中如何(为什么不要考虑REST呢?)?
3.一般来说,有没有实现这种体系结构的最佳实践。(以前,我曾经参与过web服务器和引擎之间进行简单TCP连接的项目。)
注意:- 我现在不担心跨浏览器的支持(特别是旧版本)。

就像下面建议的那样,Node.js与使用Socket.IO的WebSockets非常兼容。如果浏览器不支持WebSockets,则会降级到另一种协议,但仍然可以正常工作。我认为这比寻找C++解决方案要容易一些。 - coffekid
1个回答

1
我使用websocket实现了一个客户端-服务器API,用于在浏览器和C++后端之间通信。我们使用的库是libwebsockets http://git.warmcat.com/cgi-bin/cgit/libwebsockets/
长时间运行和同时运行的命令在websocket上都很好用。可以从客户端发送多个请求,当服务器准备好并可以无序地发送响应(或将响应合并为单个响应)时,服务器可以响应。
Ajax必需的超时和长轮询变得更简单了,例如当套接字断开连接时,服务器可以检测到客户端断开连接。
至于最佳实践,我基于这些文章设计了我的设计。我们使用JSON来编码消息。 如果你的服务器是node.js,你可以考虑使用Socket.io。它抽象了通信层,并根据可用情况选择ajax、websockets等传输方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接