XMPP:ユーザーの連絡先のプレゼンスステータスをサーバーにリクエストするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4029924

  •  26-09-2019
  •  | 
  •  

質問

私たちはサイトを持っており、strophe.js ライブラリと ejabberd XMPP サーバーを使用してそのサイト用のチャット システムを開発しました。PHP で開始されたセッション アタッチメントを使用します (社内ライブラリを使用)。私たちが行うことは、PHP スクリプトから RID と SID を取得し、strophe のセッション アタッチメントを使用することです。上記の RID と SID は cookie に保存され、strophe.js で RID が更新されるたびに cookie の RID 値が更新されます。

これは正常に機能し、ログイン後、各連絡先のプレゼンス ステータスを受け取ります。これの問題は、サイトの別のページに移動し、上記の RID (strophe によって生成された増分値を使用します) と SID を使用してアタッチすると、サーバーは連絡先のプレゼンス情報を送信しなくなることです。ログインしたとき。これにより、オンラインであっても連絡先エリアがすべて非表示になっていました。これらは、あなた (またはあなたの連絡先) がチャットからログアウトし、再度ログインした場合にのみオンラインに表示されます (XMPP サーバーからプレゼンスの更新を受信するため)。

サーバーからプレゼンスを受信したときに、連絡先のプレゼンス ステータスが Cookie に保存される (すべてのオンライン連絡先の JID が Cookie に保存されます) という回避策を書きました。これはページが読み込まれるたびにチェックされ、Cookie が設定されている場合は読み取られ、Cookie 上のすべての JID がオンラインとしてマークされます。これは正常に動作していますが、XMPP のデフォルトの動作を使用して、これを解決するより良い方法がいくつかあるかもしれません。

役に立ちましたか?

解決

サーバーに独自の初期の存在を送信するときに

XMPPサーバーでは、あなたに代わってすべての連絡先にプレゼンスプローブを送信します。その時から、あなただけの連絡先からのプレゼンスステータス変更を受信します。

あなたの連絡先のプレゼンス状態を紛失した場合、あなたはその状態を再確立するために、独自のプレゼンスプローブを送信する必要があります。しかし、これはおそらく、あなたは多くのことをやってみたいものではありません、とプレゼンス状態を周りに渡すと、おそらくほとんどの場合において好ましいます。

あなたはXMPP経由で状態を渡してみてください。たとえば、プライベートXMLストレージ(XEP-0049)、PubSubの(XEP-0060)、またはPEP(XEP-0163)を使用することができます。

代わりに、クライアント側にそれを渡すためのクッキーの別のオプションは、状態を保持するためにHTML5 SharedWorkerオブジェクトを使用することです。

他のヒント

サーバーから受信したすべてのプレゼンスをサーバーにプライベート ストレージに保存することに関連するスケール プロパティを考えると身震いします。プライベート ストレージはほとんどの場合、メモリに保存されるのではなく、長期ストレージにバックアップされるため、サーバーのディスクが粉々になることになります。

ブラウザーにさらに多くの状態を保存し、ブラウザーのバージョンから隔離したい場合で、すでに jQuery を使用している場合は、次のようにします。 jストア かなり甘いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top