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 (C++):安全的 wss 服务器

uWebSockets setUserData 线程安全吗?

从另一个线程向 uWebSockets 0.15.x 套接字发送数据

使用 CMake 在 Windows 10 上构建 uWebSockets

eclipse cpp ide中的uWebSockets未定义引用