0

チャットプロジェクトを行いました。誰かがメッセージを送信すると、このコードを実行してすべてのクライアントにメッセージを送信します

public void SendMessage(string message)
{
  Clients.RecieveMessage(message);
}

ただし、10 人のユーザーが同時にメッセージを送信すると、すべてのクライアントが 10 の応答を受け取ります。
この応答を最適化して減らす方法は?

私は次のコードを実行しました

public void SendMessage(string message)
{
  Clients.RecieveMessage(message);
  Clients.RecieveMessage("Test");
}

しかし、メッセージごとに個別の応答がありました。
SignalR がこれらの応答を結合しないのはなぜですか? これらのメッセージを 1 つの応答にマージする方法は?

4

1 に答える 1

2

これらの 10 個の異なるメッセージを 1 つの PersistentResponse に結合する場合、SignalR はこれを行う方法を公開していません。ただし、SignalR が一度に複数のメッセージをバスからプルするほど負荷が高い場合、SignalR は自動的にメッセージを 1 つの PersistentResonse に結合します。

基本的に、SignalR は、負荷を処理するために必要に応じて応答を動的に減らします。これらはすべて、サーバーとクライアントの両方で SignalR 開発者に対して完全に透過的である必要があります。

ロング ポーリング トランスポートを使用しているクライアントが頻繁にリクエストを行っていることが問題であると思われる場合は、LongPollDelay を手動で設定できます。デフォルトでは、ロング ポーリング クライアントは、メッセージを受信するとすぐに再接続します。ゼロ以外の LongPollDelay を使用すると、クライアントは遅延が経過した後に再接続します。

// Set long-polling reconnect delay to two seconds (stored in milliseconds)
SignalR.Transports.LongPollingTransport.LongPollDelay = 2000;

遅延中に送信されたすべてのメッセージは、後続のリクエストですぐにロング ポーリング クライアントに返されます。これにより、LongPollDelay 中に送信されるメッセージが常に存在する場合、効果的にロング ポーリング トランスポートが通常のポーリング トランスポートに変わります。

当然、これを行うとレイテンシが増加します。また、LongPollDelay は JavaScript クライアントでのみ尊重されることに注意してください。そのため、.NET クライアントを使用している場合は、この設定を変更しても、応答を受信するとすぐに再接続を続けます。

于 2013-01-16T22:59:45.970 に答える