c# - 很难解释 TcpClient 中的延迟

标签 c# tcp

我从 ITCH 协议(protocol)服务器接收大量数据(频繁的小消息)。

我的应用运行良好,因为所有消息都已正确解析。但是,当(据我所知)除了代码设置为“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;
        } 
    }
  }

我显示处理开始和结束的时间。然而,当我收到一条稍后的消息时——时间与收到的消息中隐藏的时间有很大的不同。 IE。我收到消息晚了。

我已经在两台机器上试过了,后者没有运行任何其他东西,但有时我仍然会遇到莫名其妙的延迟。

我知道这很难提供帮助,因为我无法提供工作示例,因为它依赖于连接到私有(private) ITCH 协议(protocol)服务器。

如果有人能阐明一些观点,那就太好了。

最佳答案

这种延迟对我来说仍然是莫名其妙的。但是,类似问题的几个答案表明使用原始套接字会更好。

我用 Socket 替换了所有 Stream 和 NetworkStreams,现在 Socket.Receive() 可以正常工作,没有任何临时延迟。

关于c# - 很难解释 TcpClient 中的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46080255/

相关文章:

c# - 将相同的数据源分配给多个 DropDownLists?

c# - StructureMap 单例用法(一个实现两个接口(interface)的类)

C#:将 CookieContainer 写入磁盘并加载回来使用

c++ - 从套接字读取和转换字节 C++ 的最快方法

c# - 来自 Asset Store 的 FPS Constructor 中的 LightningBolt 脚本

c# - 我正在尝试编写 WebApi 代码以使用 POST 请求将图像文件发送到 Node.js

java - 为什么在 while 循环中重复调用 java tcp 套接字时不发送所有数据?

java - 如何阻止客户端监听服务器或客户端正在监听的端口

sockets - React Native 中的 TCP 套接字?

c - 第一个 tcp echo 客户端无法与第二个 tcp echo 客户端通信(文件描述符错误)