2013-05-02 79 views
3

我正在实施一个客户端 - 服务器API与长作业处理时间(在某些情况下,分钟的顺序)。一些API调用很短,并立即作出响应,但双门轿车需要一些后端处理。我使用node.js作为Web服务器。我的当前implementaion是如下 -异步RestFul vs Websocket

客户端(浏览器)< - >节点的js < - >发动机

发动机是一后端处理,其处理的每个作业(C++代码)。所有的交互都是http。现在,传统上我会将异步ajax/restful请求和短作业作为同步restful请求执行长作业。

我将不得不为长处理作业(处理大量数据)的状态更新 - 喜欢中间结果,完成百分比等

我在的WebSockets loolking作为替代(我是比较新的这)。这里是我的问题 -

  1. 我应该看看websockets的长工作,而不是异步restful api(我想避免处理客户端超时,长轮询等)?
  2. 如何将所有的请求移动到websockets(为什么要休息一下呢?)
  3. 一般而言,任何实现此架构的最佳实践。 (之前,我从事与web服务器和引擎之间的交互的项目,作为与自定义命令的简单TCP连接。)

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

+0

像下面的建议一样,nodejs和使用socket.io的websockets很好。如果浏览器不支持Websocket,它会落入另一个协议,但仍然有效。我认为这将比寻找一个C++解决方案更为强大。 – coffekid 2014-05-12 18:26:37

回答

1

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

长时间运行和同时执行的命令在websocket上运行得非常好。可以从客户端发送多个请求,并且服务器可以在准备就绪时做出响应,并可以按顺序发送响应(或将响应合并为单个响应)。

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

至于最佳做法,我基于这些文章的设计。 我们使用JSON来编码消息。

如果您的服务器的nod​​e.js你可以看看Socket.io。这抽象了通信层,并可以选择ajax,websockets等取决于可用的。