サーバーは次のようなメッセージをブロードキャストします。
protected override Task OnReceived(IRequest request, string connectionId, string data)
{
if (_messagesToSent == 0)
{
int.TryParse(data, out _messagesToSent);
}
else
return Task.Delay(0);
// Broadcast data to all clients
return new TaskFactory().StartNew(() =>
{
_log.InfoFormat("Starting broadcasting of {0} messages.", _messagesToSent);
int sentMessages = 0;
if (_messagesToSent > 0)
Connection.Broadcast(GetInfoMessage());
while (_messagesToSent > 0)
{
Connection.Broadcast(GetDataMessage(sentMessages));
_messagesToSent--;
sentMessages++;
if (sentMessages % 1000 == 0)
_log.InfoFormat("{0} messages of total {1} messages sent.", sentMessages,
sentMessages + _messagesToSent);
}
_log.InfoFormat("{0} messages were sent.", sentMessages);
});
}
基本的な考え方は、最初はサーバーがクライアントから送信するメッセージの数を含むメッセージを受信することです。次に、whileループで、この量のメッセージをブロードキャストし、ログを記録します。クライアントもシンプルで、受信したメッセージの数を数え、入力データをログに記録します。
private void ConnectionOnReceived(string s)
{
ReceivedMessagesCount++;
_log.Info(s);
}
私はいくつかのテストを行いました:
- 最大1000のメッセージのブロードキャストは正常に機能し、クライアントはすべてのメッセージを受信します
- 2000メッセージをブロードキャストし、クライアントは約1500メッセージのみを受信します
- 10Kメッセージのブロードキャスト、受信した1500〜1600メッセージについての同じこと
サーバーがクラウドサービスでホストされている場合、テストはローカルでAzureを使用して実行されました。
だから、私は何が間違っているのですか?構成やその他の何かを見逃しましたか?