3

我正在实现一个具有较长作业处理时间(在某些情况下为几分钟)的客户端-服务器 API。一些 api 调用很短并且会立即响应,但是 coupe 需要一些后端处理。我使用 node.js 作为 Web 服务器。我目前的实施如下 -

客户端(浏览器)<-> 节点 js <-> 引擎

引擎是处理每个作业(C++ 代码)的后端进程。所有的交互都是http。现在,传统上我会将长作业实现为异步 ajax/restful 请求,将短作业实现为同步 restful 请求。

我将对长时间处理作业(处理大数据)进行状态更新 - 例如中间结果、完成百分比等。

我正在寻找 WebSockets 作为替代方案(而且我对它比较陌生)。这是我的问题-

  1. 我应该为长时间的工作而不是异步的restful api研究websockets(我希望避免处理客户端超时、长轮询等)吗?
  2. 将所有请求移至 websockets 怎么样(为什么还要打扰休息?)
  3. 一般来说,实现此架构的任何最佳实践。(以前,我从事的项目是将网络服务器和引擎之间的交互作为带有自定义命令的简单 TCP 连接。)

注意:- 我现在不担心跨浏览器支持(尤其是旧版本)。

4

1 回答 1

1

我已经使用 websockets 实现了一个客户端-服务器 API,以便在浏览器和 C++ 后端之间进行通信。我们使用的库是 libwebsockets http://git.warmcat.com/cgi-bin/cgit/libwebsockets/

长时间运行和同时运行的命令在 websocket 上运行良好。可以从客户端发送多个请求,并且服务器可以在准备好时进行响应,并且可以将响应无序发送回(或将响应合并为单个响应)。

Ajax 所需的超时和长轮询变得更简单,例如,当套接字损坏时,服务器可以检测到客户端断开连接。

至于最佳实践,我的设计基于这些文章。我们使用 JSON 对消息进行编码。

如果您的服务器是 node.js,您可以查看 Socket.io。这抽象了通信层,并且可以根据可用的内容在 ajax、websockets 等之间进行选择。

于 2013-05-19T23:03:23.933 回答