This示例正是我想要在其核心上做的。
虽然可以使用websocketpp::connection_hdl
轻松跟踪用户,但我需要更多地了解这些信息,就像堆栈可能跟踪我们正在查看哪个页面以更新投票,评论,答案,消息一样左上角等。
我刚刚发现std::queue
不是完全线程安全的does .push() fail or wait while locked in this code example?,我将找到一种方法(可能有一个堆栈q)在boost::lockfree::queue
{{3}中工作}}。更重要的是,我刚刚发现线程安全向量更麻烦Thread-Safe C/C++ queue optimized for push
从第一个链接的代码中,如何在没有锁定的情况下安全地跟踪用户数据(例如当前查看的堆栈问题)。阻断?
答案 0 :(得分:1)
我实际上是在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类可以识别,所以你应该总是添加这样的守卫。
编辑:Here是稳定的websocket ++中的示例,它显示了如何执行此操作的一种方法。