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

Posted

技术标签:

【中文标题】从另一个线程向 uWebSockets 0.15.x 套接字发送数据【英文标题】:Sending data to uWebSockets 0.15.x sockets from another thread 【发布时间】:2019-03-03 08:44:37 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢。你的帖子为我节省了很多时间。此信息目前在文档中的任何地方都不可用,但它可能是正确执行此操作的唯一方法。

以上是关于从另一个线程向 uWebSockets 0.15.x 套接字发送数据的主要内容,如果未能解决你的问题,请参考以下文章

C++ uWebSockets 在一个线程中集成事件循环

C ++ uWebSockets在一个线程中集成了事件循环

有没有办法从另一个进程向线程发送信号?

从另一个线程向 QSerialPort 发送数据

从另一个线程在主线程中运行代码

C# 从另一个线程调用 form.show()