我正在实现具有较长作业处理时间的Client-Server API(在某些情况下为几分钟)。一些api呼叫很短并立即响应,但是轿跑车需要一些后端处理。我使用node.js作为Web服务器。我目前的实施如下 -
客户端(浏览器)< - >节点js< - >引擎
引擎是一个处理每个作业(C ++代码)的后端进程。所有的互动都是http。现在,传统上我会将长作业实现为async ajax / restful请求和短作业作为同步restful请求。
我将对长处理作业(处理大数据)进行状态更新 - 如中间结果,完成百分比等。
我正在将WebSockets作为一种替代方式(而且我相对较新)。这是我的问题 -
注意: - 我现在并不担心跨浏览器支持(特别是旧版本)。
答案 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等之间进行选择。