パート1:問題の解決
クライアント接続を本当に追跡する必要がある場合は、以下のパート2を参照してください。ただし、質問から、求めているものが問題を解決するかどうかはわかりません。
あなたの問題をエコーバックできるかどうか見てみましょう。あなたはチャットアプリを書いていますが、それは完全にAJAXではないサイト用です(たとえば、Gmailのように)。このサイトには、ユーザーが別のページへのリンクをクリックした後にチャネルを再設定する必要があるページナビゲーションが含まれています。ユーザーがナビゲートすると、新しいページがレンダリングされ、その時点で新しいトークンを取得しないようにします。同じclient-idで既存のトークンとチャネルを再利用したい。
それが正しければ、2つの代替ソリューションがあります。1つは簡単ですがユーザーエクスペリエンスはそれほど優れていません。もう1つはトリッキーですが、最終結果ははるかにスムーズです。
トークンをCookieに保存します。ページを再レンダリングするときは、channel.create_channelを再度呼び出すのではなく、Cookieのトークンを使用するだけです。トークンの有効期限が切れると、ユーザーが元のページにとどまっていた場合と同じように、onerrorコールバックが返されます。この時点で、channel.create_channelを再度呼び出します。これに伴う問題は、Comet接続の性質上、再接続が遅くなる可能性があることです(悪い場合は最大10秒以上)。
チャットに関連しないサイト全体をiframeでラップします。チャンネル作成コードとUIを外部iframeに配置します。これにより、ユーザーがナビゲートするたびに再接続する必要がなくなります。これにより、ナビゲーションのダウンタイムが回避されます。少量のFirebugの調査で明らかになるように、orkutはフローティングdivでこの手法を使用していることに注意してください。
パート2:機能リクエスト
私が誤解していることが判明した場合、クライアントの接続を追跡する必要があります。
現在、クライアントがclient-idで識別されるチャネルに接続されているかどうかを確認する組み込みの方法はありません。
ただし、現在、「プレゼンス」(チャットの意味で)を追加して、クライアントが特定のクライアントIDで作成されたチャネルに接続または切断したときに、アプリが登録して投稿を取得できるようにしています。また、プレゼンスを「プローブ」して、特定のクライアントIDが接続されているかどうかを照会できる場合もあります(この部分の詳細については引き続き作業します)。
これはトークンベースではなく、クライアントIDベースであることに注意してください。
これについてはまだ明確なリリース日はありませんが、私が言ったように、現在積極的に取り組んでいます。
それまでの間、クライアントからアプリに戻るハートビートHTTPリクエストを使用して、毎分「ねえ、私はまだここにいます」と言うことができます。たとえば、2分ごとに実行され、チェックインしていないクライアントを非アクティブとしてマークする何らかのタスクが必要です。また、このデータをどこかに保存する必要があります。