1

現在、アプリケーションでチャット機能を提供するために SignalR を使用しています。しかし、チャット バックエンドとして Openfire XMPP サーバーを使用しています。そのため、SignalR ハブは OnConnected イベントで XMPP 接続を作成します。この接続は OnDisconnected イベントで閉じられます。

さらに重要なことに、XMPP 接続は OnAuthenticated、OnRosterStart、OnRosterEnd、OnMessage などのいくつかのイベントを公開します。ハブはこれらのイベントを処理し、適切なクライアント側の JS メソッドを呼び出します。

これは単一ページのアプリケーションではないため、ユーザーはページ間を移動します。そのため、ページごとに XMPP 接続を再作成することはお勧めできません。また、SignalR 接続が終了し、受信者が到達した新しいページでまだ初期化されていないときに送信者がメッセージを送信した場合、ユーザーがメッセージを失うというエッジ ケースもあります。

そのため、XMPP 接続のライフサイクルをセッション レベルで管理したいと考えています。つまり、Session_Start/login で XMPP 接続を作成します。Session_End/logout で接続を破棄します。この部分は非常に単純です。しかし、注意が必要なのは、ロード バランサーの背後に複数の Web サーバーがある場合に、XMPP 接続をセッションに保存し、確実にイベントを発生させる方法です。

セッション、キャッシュ、アプリケーション変数など、ASP.NET が提供する永続化メカニズムを理解する方法は、すべてデータのシリアル化/逆シリアル化に関するものです。しかし、この場合、保存したいオブジェクトには処理が必要なイベントがあります。

したがって、主な質問は、これに対する解決策はまったくあるのでしょうか?

ありがとう

4

0 に答える 0