【问题标题】:Async RestFul vs Websocket异步 RestFul 与 Websocket
【发布时间】:2013-04-27 01:34:54
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 就像下面建议的那样,nodejs 与使用 socket.io 的 websockets 配合得很好。如果浏览器不支持 websockets 它属于另一个协议,但仍然有效。我认为这比寻找 c++ 解决方案更容易。

标签: c++ http rest websocket


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多