0

このwebsocket ++の例は、まさに私がその核心でやりたいことです。

ユーザーは で簡単に追跡できますがwebsocketpp::connection_hdl、投票、コメント、回答、左上隅のメッセージなどを更新するために見ているページをスタックが追跡する方法と同様に、ユーザーに関するより多くの情報を保持する必要があります。

このコード例で .push() が失敗したり、ロックされている間に待機したりするstd::queueのは、完全にスレッドセーフではないことがわかりましたか? push 用に最適化されたスレッドセーフな C/C++ キューで動作する方法を (おそらくスタック q を使用して) 見つけようとしています。さらに重要なことに、スレッドセーフなベクトルははるかに問題であることがわかりました C++のスレッドセーフなベクトルクラスboost::lockfree::queue

最初のリンクのコードから、ユーザー データ (現在表示されているスタックの質問など) をロックおよびブロックせずにスレッドセーフに追跡するにはどうすればよいですか?

4

1 に答える 1

1

実験的なブランチは使用していませんが、実際には websocket++ アプリケーションでこれを自分で行っています。

私がしていることは、on_open で UserData オブジェクト (定義済み) を作成し、コンストラクターで接続を取得することです。次に、そのオブジェクトを a に配置しますstd::map<std::string, connection_hdl>。文字列はシリアル化された接続であり、一意に識別する方法を提供します。を試すことができstd::map<connection_hdl, UserData>ます。

UserData を見つけたいときは、マップで接続を検索するだけで、UserData が返されます。

boost::unique_lock<boost::mutex>次に、スレッドセーフにするには、にアクセスするたびにa を実行する必要がありますstd::map。ほとんどの std クラスは thead を認識しないため、常にこのようなガードを追加する必要があります。

編集:これは、これを行う方法の 1 つを示す安定した websocket++ の例です

于 2013-03-10T06:44:00.053 に答える