C++ uWebSockets 在一个线程中集成事件循环
Posted
技术标签:
【中文标题】C++ uWebSockets 在一个线程中集成事件循环【英文标题】:C++ uWebSockets integrate event loop in one thread 【发布时间】:2017-08-25 21:57:50 【问题描述】:我在我的 C++ 项目中使用 uWebSockets,我有自己的自定义事件循环。这是一个while循环,每次执行之间都有可变的延迟。它看起来像这样:
while (true)
std::this_thread::sleep_for (variableTime);
// Execute logic
我之前一直在使用另一个线程来执行逻辑,但我想将 uWebSockets 循环与我的循环集成。像这样的:
#include <iostream>
#include <uWS/uWS.h>
using namespace std;
int main ()
uWS::Hub h;
h.onMessage([](uWS::WebSocket<uWS::SERVER> *ws, char *message, size_t length, uWS::OpCode opCode)
ws->send(message, length, opCode);
);
if (h.listen(3000))
h.run();
while (true)
std::this_thread::sleep_for (variableTime);
h.getMessages(); // <-- doesn't call `onMessage` until this is executed
// Execute logic
我该怎么做呢?
【问题讨论】:
【参考方案1】:今天我也有同样的问题。在对源代码进行了一些挖掘之后,我想我找到了答案。
看来您正在寻找的是最近添加的 (https://github.com/uNetworking/uWebSockets/pull/762) Node::Poll (Hub 继承 Node) 函数,该函数在程序主循环中使用是非阻塞的。我认为它应该完全按照您的想法工作。
【讨论】:
这正是我想要的!我已经使用并行线程解决了它,所以我有点希望他们早点添加它:P 但迟到总比没有好。无论如何,非常感谢!以上是关于C++ uWebSockets 在一个线程中集成事件循环的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Visual Studio C++ 中的 uWebsockets?
uWebSockets setUserData 线程安全吗?
从另一个线程向 uWebSockets 0.15.x 套接字发送数据