首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uWebSockets并发会话

uWebSockets并发会话
EN

Stack Overflow用户
提问于 2020-05-30 22:45:19
回答 1查看 743关注 0票数 1

为了简单起见,让我们假设我的服务器上只运行了一个uWebSockets实例:

代码语言:javascript
复制
struct UserData
{
   uWS::WebSocket<true, uWS::SERVER> *ws;
   bool logged_in = false;
   ID user_id; 
};
uWS::SSLApp()
          .ws<UserData>(
              "/*",
              { 
               .open =
                   [](auto *ws, auto *req) {
                     std::cout << "user with ip: " << ws->getRemoteAddress()
                               << " connected" << std::endl;
                   },
               .message =
                   [](auto *ws, std::string_view message,
                      uWS::OpCode opCode) {
                     auto userData = static_cast<UserData *>(ws->getUserData());
                     // give websocket pointer to a session
                     userData->ws = ws;
                     Session session;
                     session.process_message(userData, message);
                   } 
          .listen(9001,
                  [](auto *token) {
                    if (token)
                      std::cout << "listening on port 9001" << std::endl;
                    else
                      std::cout << "failed to listen on port 9001" << std::endl;                            
                  })
          .run();
    }); 

会议的可能执行情况:

代码语言:javascript
复制
class Session {
    process_message(UserData &userData, const std::string_view &message) {  
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

在函数Session::process_message中,我有一个需要很长时间才能完成的代码。如何将控制返回到事件循环,以便它处理其他会话?换句话说,如何将程序设计为完全异步/并发运行会话?

库是异步的。这是否意味着库将同时处理其他连接,而我没有什么可担心的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-19 23:55:53

在睡眠期间,uWebSockets将不处理其他网络连接。

将睡眠更改为只获取互斥、添加队列和释放互斥锁的快速代码。

创建另一个线程(我们称之为ProcessingThread),该线程获取相同的互斥对象,从队列中删除消息,释放互斥对象,并处理消息。ProcessingThread可能需要处理消息而不减慢uWebSockets线程的时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62109533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档