【问题标题】:.net Tcp Server receives bytes in large clumps every few minutes.net Tcp 服务器每隔几分钟就会收到一大堆字节
【发布时间】:2012-02-17 21:44:41
【问题描述】:

背景:

  • C# .net 同步 Tcp 服务器
  • 通过使用 AcceptTcpClient 方法阻塞 TcpListener 来分配 TcpClient 对象
  • 一旦有了 TcpClient 对象,我就将它传递给调用客户端的 GetStream 方法以创建 NetworkStream 的线程
  • 此 NetworkStream 循环,在每次迭代中执行 networkStream.Read(someBuffer, 0, 4096)
  • 现在客户端和服务器位于同一个网络上,没有拥塞可言
  • 我的服务器有足够的可用内存
  • 如果我将服务器软件加载到另一台机器上,问题就会消失
  • 踢球者:来自网络 Linux 机器的流量可以按时顺利通过

我的服务器已经运行好几个月了。然而,在过去的周末,进程开始的地方( tcpListener.AcceptTcpClient() )每隔几分钟才发生一次,而不是快速连续接收小字节组。所以我的服务器处于空闲状态,然后将 30-50 个客户端请求全部捆绑到一个巨大的字节块中。不用说,这会导致巨大的延迟并给我的服务器带来压力。如果客户端请求的集群足够大,我的服务器可能需要 30 分钟才能赶上。

在我的客户端内置的日志记录中,我可以看到它们进行网络写入,并在每个写入之间刷新。所以客户端运行正常。

这意味着某种系统干预。是我的 Tcp 服务器(如上所述)坏了,还是 Windows 中的某些东西干扰了我的流量,我怎么知道?

谢谢大家。

【问题讨论】:

  • 我想问题是,周末发生了什么变化?代码更改?网络维护?清洁工将路由器换成真空吸尘器?
  • 不更改代码,不更改服务器。我正在四处寻找更多,看看还有什么可以改变的。
  • 没有服务包应用到服务器?这听起来像是一个连接问题,尤其是。因为您的代码已经运行了一段时间并且仍然在另一台机器上运行。不确定您所在的组织类型,但在大公司,如果网络管理员更改您的交换硬件或服务器管理员应用 SP,则可能会发生这种情况。
  • @ChrisShain 奇怪的是,我基于 Windows 的客户端流量延迟了,但从 Linux 服务器到我的 .net Tcp 服务器的流量按时通过,很好。
  • 也许您的客户都被转移到了另一个子网,与您的服务器子网的连接很糟糕。这绝对是网络问题。

标签: c# .net tcp


【解决方案1】:

您可能希望在每个 Tcp 端点安装一些数据包捕获软件。你会感到惊讶。我现在遇到了类似的问题,实际上几乎完全相同。

当我安装捕获软件时,我注意到端点之间的流量按预期快速且准时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 2019-02-23
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2013-04-13
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多