Async RestFul vs Websocket
Async RestFul vs Websocket
我正在实现一个作业处理时间很长的客户机-服务器API(在某些情况下需要几分钟)。有些api调用很短,可以立即响应,但有些api调用需要一些后端处理。我使用node.js作为web服务器。我目前的实现如下-
客户端(浏览器)<-> node js <-> engine
引擎是处理每个作业(c++代码)的后端进程。所有的交互都是http。现在,传统上我会将长作业实现为异步ajax/restful请求,将短作业实现为同步restful请求。
我将对长处理作业(处理大数据)进行状态更新-如中间结果,完成百分比等。
我正在寻找WebSockets作为一个替代方案(我是相对较新的)。这是我的问题-
- 我应该看看websockets的长作业,而不是异步restful api(我想避免处理客户端超时,长轮询等)?
- 如何将所有的请求移动到websockets(为什么要打扰休息?) 一般来说,实现此体系结构的任何最佳实践。(在此之前,我从事的项目与web服务器和引擎之间的交互作为一个简单的TCP连接与自定义命令。)
注意:-我现在不担心跨浏览器支持(特别是旧版本)。
我已经实现了一个客户端-服务器API,使用websockets在浏览器和c++后端之间进行通信。我们使用的库是libwebsockets http://git.warmcat.com/cgi-bin/cgit/libwebsockets/
长时间运行和同时运行的命令都在websockets上工作得很好。可以从客户端发送多个请求,服务器可以在准备好时响应,并且可以按顺序发送响应(或将响应合并为单个响应)。
超时&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, websockets等之间进行选择。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- Websocket++ 错误:收到错误handle_transport_init TLS 握手失败
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- Async RestFul vs Websocket