2

サイトがあり、strophe.jsライブラリとejabberdXMPPサーバーを使用してそのためのチャットシステムを開発しました。PHPで開始されたセッション添付ファイルを使用します(社内ライブラリを使用)。PHPスクリプトからRIDとSIDを取得し、stropheのセッション添付ファイルを使用します。上記のRIDとSIDはCookieに保存され、CookieのRID値は、strophe.jsのRIDが更新されるたびに更新されます。

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

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

4

2 に答える 2

4

XMPPサーバーは、サーバーに独自の初期プレゼンスを送信するときに、ユーザーに代わってすべての連絡先にプレゼンスプローブを送信します。それ以降は、連絡先からのみプレゼンスステータスの変更を受け取ります。

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

XMPPを介して状態を渡すことを試みることができます。たとえば、プライベートXMLストレージ(XEP-0049)、Pubsub(XEP-0060)、またはPEP(XEP-0163)を使用できます。

クライアント側に渡すためのCookieの代わりの別のオプションは、HTML5SharedWorkerオブジェクトを使用して状態を保持することです。

于 2010-10-29T04:01:49.830 に答える
1

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

より多くの状態をブラウザーに保存し、ブラウザーのバージョンから身を守る必要があり、すでにjQueryを使用している場合、jStoreは非常に便利です。

于 2010-10-31T18:31:28.030 に答える