线程安全的用户数据与这个websocket++示例

thread-safe user data with this websocket++ example

本文关键字:websocket++ 示例 数据 安全 用户 用户数 线程      更新时间:2023-10-16

这个websocket++的例子正是我想要做的。

虽然用户可以很容易地跟踪websocketpp::connection_hdl,但我需要保留更多的信息,就像stack可能会跟踪我们正在查看的页面一样,以更新左上角的投票,评论,答案,消息等。

我刚刚发现,std::queue是不完全线程安全的。push()失败或等待,而锁定在这个代码示例?我要找到一种方法(可能与堆栈q)在boost::lockfree::queue线程安全的C/c++队列优化推送工作。更重要的是,我刚刚发现线程安全的向量是更麻烦的c++

从第一个链接中的代码,我如何跟踪用户数据(如当前查看的堆栈问题)线程安全而不锁定&阻塞?

我实际上是在一个websocket++应用程序中这样做的,尽管我不使用实验分支。

我所做的是在on_open中创建一个UserData对象(我已经定义了),它接受构造函数中的连接。然后我把那个物体放在一个std::map<std::string, connection_hdl>上。字符串是序列化的连接,它提供了一种唯一标识它的方法。你可以试试std::map<connection_hdl, UserData>

当我想找到UserData时,我只需在映射中查找连接,它返回UserData。

然后让它线程安全,你需要做一个boost::unique_lock<boost::mutex>每次你访问std::map。几乎没有std类是头感知的,所以你应该总是添加这样的保护。

编辑:这里是一个稳定的websocket++的例子,它显示了如何做到这一点的一种方法