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

标签 c++ uwebsockets

我正在使用 uWebSockets 版本 0.15.x 来接受和管理服务器上的网络套接字连接。我有一个线程调用 uWS::TemplatedApp::run 来处理这个问题。

我需要从另一个线程向所有打开的网络套接字发送数据。我的理解是 uWebSockets 不是线程安全的。推荐的方法是什么?

(0.14.x 的 uWebSockets 用户手册讨论了 uS::Async,但是这个类在 0.15.x 中消失了。从当前的文档中不清楚等价物是什么。)

最佳答案

这可以使用以下方法完成:

  • uWS::Loop::defaultLoop - 返回调用线程的 Loop 对象
  • uWS::Loop::defer - 在循环的线程中执行给定函数

在提议的用例中,“服务器”线程可以调用 uWS::Loop::defaultLoop 并将该指针提供给其他线程。其他线程可以调用 uWS::Loop::defer 以在“服务器”线程中运行代码,在 lambda 中捕获所需数据。线程可以共享一个套接字列表,只要它是多线程安全的,或者只能从“服务器”线程中运行的代码访问。

关于c++ - 从另一个线程向 uWebSockets 0.15.x 套接字发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54967062/

相关文章:

socket.io - 带有 istio 的 GKE 上的 websockets 给出 'no healthy upstream' 和 'CrashLoopBackOff'

C++应用程序仅在关闭时才在串行上发送数据

c++ - Linux 上运行程序的目录?

c++ - 为什么显式声明其中一个特殊成员函数会禁用其他成员函数的生成

c++ - 异常安全的 for 循环

c++ - 为什么模板参数上的 is_copy_constructible 静态断言失败?

node.js - µWebSockets 编译失败且没有预编译二进制文件

c++ - 如何修复 OSX 中“找不到 "fatal error: ' sys/epoll.h”文件?