我正在接收来自ITCH协议服务器的大量数据(频繁的小消息)。
我的应用程序很好地工作,因为所有的消息都被正确地解析了。然而,当(据我所知)除了代码设置为“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;
        }
    }
  }

我显示处理开始和结束的时间。但是,当我收到一条稍后的消息时,时间与接收到的消息中隐藏的时间相差很大。也就是说,我很晚才收到消息。
我已经在两台机器上试过了,后者没有其他的机器在运行,有时我还是会有一些神秘的延迟。
我理解这很难帮助,因为我无法提供一个工作示例,因为它依赖于连接到私有的itch协议服务器。
如果有人能发光那就太好了。

最佳答案

我仍然无法解释这一延误。然而,对类似问题的一些回答表明,使用原始套接字会更好。
我用socket替换我的所有流和网络流,现在socket.receive()可以正常工作,不会有任何特别的延迟。

08-27 15:35