1

最近、Strophe.js アプリケーションで別の問題が発生しました。ユーザー B とアクティブにチャットしている (<active> などを含む仕様に従って適切な xml を送信している) にもかかわらず、サーバーがユーザー B に私が利用できなくなったことを通知することが起こります

現時点では、ロジックは次のようになります。

  • 接続
  • 初期プレゼンススタンザを送信
  • 必要に応じてステータス (不在/dnd) を更新する
  • 10 秒ごとにサーバーへの ping を開始する
  • ユーザーはチャットできるようになりました

サーバーがクラッシュしていないことを確認するために Ping が実行されます。これは広く使用されている (<iq...> を使用する) 手法です。

ユーザーが送信するすべてのメッセージは次のようになります。

<message from="me@server.ltd" to="friend@server.ltd" type="chat" id="randomID" xmlns="jabber:client">
    <active xmlns="http://jabber.org/protocol/chatstates" />
    <body>Text</body>
</message>

この問題とその解決策を知っていますか?

4

1 に答える 1

0

この問題は、Strophe.rosterプラグインを使用して解決できます。この問題は、ユーザーがサーバーに再ログインしたときに新しいセッションが作成されたという事実に関連しています。しばらくすると(おそらく60秒)、古いセッションが期限切れになり、サーバーはユーザーがいなくなったという情報をブロードキャストしました。

このソリューションでは、各連絡先がログインしたときに作成したリソースを保存し、ユーザーがいなくなったときにそれらを削除する必要があります。リソースがなくなった場合にのみ、ユーザーはオフラインであると見なすことができます。

また、Strophe.rosterに新しい関数を追加しました。例:

isOnline: function (jid) {
    var item = this.findItem(jid);
    if (!item || !item.resources) {
        return false;
    } else {
        for (var k in item.resources) {
            return true;
        }
        return false;
    }
}
于 2012-12-01T12:47:16.770 に答える