3

特定の公開機能に現在サブスクライブしているクライアントの数を確認する方法はありますか? 問題は、すべてのグループが独自の一意のグループを持つさまざまなグループがあることghashです。ユーザーがグループを離れることを選択して新しいグループに入ると、このガッシュが変更され、同じ公開機能がサブスクライブされますが、ghashもちろん異なります。

そのため、(サーバー側で) 各グループ/ghash に一度に登録されているクライアントの数を確認する方法を探しています。私は一日中このようなものをいじっていますが、正直言ってうまくいきません. 私はまた、ソケットの「unsub」イベントとそのすべてをリッスンしていますが、それでも...これはすべて地獄のようにバグです。

私のコード全体に興味がある人は、ここで見つけることができます! (ここに貼り付けるには長すぎることがわかりました。)

誰かが助けてくれることを本当に願っています!:-)

乾杯、P

編集:または言い換えると:これらすべての websocket が同じパラメーターで呼び出された sockjs websocket に現在接続されているクライアントの数をカウントする方法はありますか?

================================================== =======================

編集 2: 新しいバージョン:リンク

何らかの理由でこれはまったく機能していません...サブスクリプションに提供されたghashが実際のソケットサブスクリプションのいずれとも決して等しくないため、挿入は行われません(-> lin 20を参照してください: ghashは決してghash2と等しくありません)。私はこれがどのように可能か理解していませんか?セッションが変更されるたびに、サブスクリプション関数全体が呼び出されghashます。この var が、実際のソケットに送信されたパラメーター (送信) と決して等しくならないのはなぜですか? (それは常にガッシュでもありますが、常に別のグループのガッシュです)。

私はここで本当に迷っています!:-(

4

3 に答える 3

1

私は今、あなたが古いノード スタイルの socket.io プログラミングを行っていることを確認しました。私はノードプロジェクトで同様のことをしました。これはおそらく本当の質問です。Meteor のドキュメントでは、ソケットという単語さえ使用していません。他の誰かがあなたと一緒に新しい質問をするかもしれませんが、サブスクライバーの追跡に関するこの質問は、この回答で回答されています.

meteor は新しい世界であり、その考え方に慣れれば、そのようなことも処理できると思います。たとえば、チャットルーム用のフィールドを使用して、メッセージのコレクションを作成します。各クライアントは自分のチャットルームを選択し、messages.find({chatroom:'box5'}) を見つけて表示します。新しいメッセージは、そのチャットルームをリッスンしているすべてのクライアントに自動的に送信されます。Meteor にソケットを使用させます。

何かにサブスクライブしているクライアントのカウントに対する答え:

疑似コード: 各サブスクリプション署名のカウント数 = {} を保持するオブジェクトを作成します。

サインアップ時に、サブスクリプションを一意に表す文字列を作成し、カウント オブジェクトに追加します。counts['params as string'] += 1;

サインアウトカウント['params as string'] -= 1;

誰も購読していないことを知るロジックは次のとおりです: done = (0 == counts['params as string'] )

于 2013-09-11T05:58:45.290 に答える
0

どうやら私が今知っているように、これを行うことは不可能です。私はいくつかの調査を行い、多くのことを試しましたが、何らかの理由で、同じデータを同じクライアントに転送するために複数の Websocket が開かれることがあります。--> このアプローチでは、接続されているクライアントの数を数えることはできません。ブラウザウィンドウを閉じてもイベントがトリガーされないため、変更時にイベントをトリガーするghashだけでは十分ではありません。

「同じデータ変更を表示している」クライアントの数をカウントする機能があると思います (より良い言い方は考えられません)。メテオコア開発者の中には、ここに 2 セントを投入できるかもしれないので、これが可能かどうかはわかります。

誰かがいつか解決策を思いつくことを願っています..できません! :(

于 2013-09-14T02:26:36.940 に答える