1

私は本当に基本的なハブを作成し、グループを介しIHubContextてjavascriptクライアント側メソッドを呼び出します。これにより、異なる接続がいくつあっても、常に同じユーザーにデータをプッシュでき、テキストを渡します。そのテキストは、ブラウザの複数行のテキストボックスに追加されます。

それはすべて本当にうまく機能します。スレッドは通常、長い操作を実行し、多くの場合、ハブコンテキストを使用して操作のステータスを報告するテキストを追加してクライアントを呼び出します。

ただし、誰かがブラウザを閉じて、後でテキストボックスのあるページに戻るという状況に対応したいと思います。

今のところ、彼らは接続している操作のポイントからテキストを受け取り始めます。操作の開始からすべてのテキストを取得するようにクライアントからサーバーにリクエストを送信するにはどうすればよいですか?

私のアイデアはStringBuilder、クライアントハブに送信するテキストと同じように各行を追加するオブジェクトを作成することでした。

StringBuilder次に、ハブの接続時に、クライアントからサーバー側の関数を呼び出します。この関数は、オブジェクトから取得できる全文を要求します。ToString();

しかし、ハブStringBuilderは、まだ実行中のスレッドのどこからオブジェクトを取得するかをどのように知ることができますか?

また

代わりにそれをクライアントにプッシュする方法がある場合、実行中のスレッドでユーザーが接続していることをどのように確認して、をユーザーに送信できStringBuilder ToString()ますか?

NB。毎回追加された文字列全体を再送したくありません!ユーザーが接続したばかりで、追いつく必要がある場合のみ。

これを行う方法を理解することは、ハブの外部のサーバーでsignalRと状態を処理する方法を理解するのに役立つと思います。ありがとうございました。

4

1 に答える 1

2

まず、このデータを(メモリ内のStringBuilderだけでなく)ある種の永続ストレージに保存する必要があります。それにもかかわらず、実際に行う必要があるのは、タイムスタンプ付きの個々の文字列を格納することです。次に、論理ユーザーを最後に見たときのことを思い出して、ハブに最初に接続したときからすべてのエントリをダンプします。

SignalRのフラッグシップであるテストベッドアプリケーションであるJabbRは、メッセージIDを使用して、クライアントが最後に受信したメッセージID以降のすべてのメッセージIDを要求することを除いて、このようなことを行います。詳細については、チャットハブのGetPreviousMessagesを確認してください。

于 2012-07-30T22:19:54.843 に答える