Async RestFul vs Websocket

时间:2013-05-02 18:47:51

标签: c++ http rest websocket

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

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

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

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

我正在将WebSockets作为一种替代方式(而且我相对较新)。这是我的问题 -

  1. 我应该查看websockets的长作业而不是异步的restful api(我希望避免处理客户端超时,长轮询等)?
  2. 如何将所有请求移至websockets(为什么要休息呢?)
  3. 一般而言,实施此架构的任何最佳实践。 (以前,我使用Web服务器和引擎之间的交互作为带有自定义命令的简单TCP连接的项目。)
  4. 注意: - 我现在并不担心跨浏览器支持(特别是旧版本)。

1 个答案:

答案 0 :(得分:1)

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

长时间运行和同步命令在websockets上都运行良好。可以从客户端发送多个请求,服务器可以在准备就绪时进行响应,并且可以不按顺序发送响应(或将响应合并到单个响应中)。

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

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

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