サイトがあり、strophe.js ライブラリと ejabberd XMPP サーバーを使用してチャット システムを開発しました。PHP で開始されたセッション アタッチメントを使用します (社内ライブラリを使用)。PHP スクリプトから RID と SID を取得し、strophe のセッション アタッチメントを使用します。上記の RID と SID は Cookie に保存され、Cookie の RID 値は strophe.js の RID が更新されるたびに更新されます。(これは、ページの更新/サイトの他の場所へのナビゲーションでセッション ID を再利用できるようにするためです)
現在、複数のタブ/ウィンドウで動作させる予定です。私は Facebook の実装を観察しましたが、タブごとに特定のドメインへの長いポーリング リクエストがあります。このドメインはタブごとに異なります。たとえば、タブ 1 は 0.86.channel.facebook.com になります。2 番目のタブは 1.86.channel.facebook.com です。私が理解しているように、これは特定のドメインへの 2 つのアクティブなリクエストというブラウザの制限を解決することです。この複数ドメイン ソリューションはどのように実装されていますか?
次は、チャット セッション自体についてです。チャット セッションはタブごとに異なりますよね? UI は Facebook のように各タブとどのように同期されますか? 私の考えは、すべてのアクションごとに、チャットに関連して行われたアクションを含むメッセージがユーザー自身の JID に送信されるということです。たとえば、チャット ウィンドウを開くと、次のようなメッセージ スタンザが送信されます。
<message from="my_own_jid" to="my_own_jid" type="chat">
<body>{"jid-of-contact":"open-chat-box"}</body>
</message>
これはチャット クライアントでキャッチされ、それに応じて UI が調整されます (この場合、連絡先のチャット ボックスが開きます)。
この実装に関する提案やコメントはありますか?
ありがとう!