我正在实现具有长作业处理时间(在某些情况下为几分钟)的客户端服务器API。一些api调用很简短,可以立即响应,但双门轿跑车需要一些后端处理。我正在使用node.js作为Web服务器。我目前的实现方式如下-

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

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

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

我很喜欢WebSockets作为替代方案(而且我还比较陌生)。这是我的问题-

  • 我应该考虑使用websockets来处理长时间的工作,而不是使用异步 Restful api(我希望避免处理客户端超时,长时间轮询等)吗?
  • 如何将所有请求移至websocket(为什么还要打扰休息?)
  • 通常,实现此体系结构的所有最佳实践。 (以前,我从事的项目是将Web服务器和引擎之间的交互作为带有自定义命令的简单TCP连接进行的。)

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

    最佳答案

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

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

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

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

  • http://www.altdevblogaday.com/2012/02/01/controlling-your-game-engine-over-websocket/
  • http://www.altdevblogaday.com/2012/01/23/writing-your-own-websocket-server/

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

    关于c++ - 异步RestFul与Websocket,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16345507/

    10-13 08:34