ITCHプロトコルサーバーから大量のデータ(頻繁に小さなメッセージ)を受信しています。TcpClientの遅延を説明するのが難しい
私のアプリは、すべてのメッセージが正しく解析されるという点でうまく機能します。しかし、「ReadByte」にコードが設定されていることを除いて、何も起こっていないということは(私が知る限り)謎の遅れが出ます。
TcpClient simpleTcp = new TcpClient(serverAddress, serverPort);
simpleTcp.NoDelay = true;
simpleTcp.Client.NoDelay = true;
simpleTcp.Client.ReceiveBufferSize = 1024;
simpleTcp.ReceiveBufferSize = 1024;
simpleTcp.ReceiveTimeout = 5000;
NetworkStream tcpStream = simpleTcp.GetStream();
//Send login and subscciptions...
while (true)
{
lock (TcpLock)
{
int abyte = tcpStream.ReadByte();
try
{
LbTime.Stopwatch.Restart();
Console.WriteLine("\n>>>>GetMessage Start: " + DateTime.UtcNow.ToString("HH:mm:ss.fff") + " " + LbTime.Stopwatch.ElapsedMilliseconds.ToString("F0"));
//Process message (Complex)
Console.WriteLine(">>>>GetMessage End: " + LbTime.Stopwatch.ElapsedMilliseconds.ToString("F0") + " Now: " + DateTime.UtcNow.ToString("HH:mm:ss.fff") + "\n");
}
catch (Exception err)
{
throw;
}
}
}
処理の開始時と終了時を示します。しかし、後のメッセージを受け取ったとき、受信したメッセージに埋め込まれている時間と大きく異なります。私。私はメッセージを遅く受け取っています。
私は2台のマシンでこれを試しましたが、後者には何も実行されていませんでしたが、時々不思議な遅れがあります。
私は実際の例を提供することができませんが、これは私的ITCHプロトコルサーバーへの接続に依存しているため、これを手助けすることは非常に困難です。
もし誰かが光を放つことができればそれは素晴らしいでしょう。
どのくらい遅れているのですか?データがネットワークを通過するには時間がかかり、とにかくバッファリングのために送信側で遅延が発生する可能性があります。 –
200 + ms。これは、xConnectの非常に高速な内部リンクにあります。 – ManInMoon
送信側でバッファリングを行うNagleのアルゴリズムのように聞こえます。システムクロックの違いだけでも、200ms離れた2つのシステムクロックは非常に信じられます。 –