0
我正在接收來自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算法。或者只是系統時鐘的差異 - 兩個相距200毫秒的系統時鐘非常可信。 –