【问题标题】:Sending/Receiving data fast over TCP causes block通过 TCP 快速发送/接收数据会导致阻塞
【发布时间】:2013-11-25 23:15:04
【问题描述】:

我正在通过创建 4 个客户端来测试我的服务器性能。然后它们每秒向服务器发送 1 个数据包,然后服务器接收这些数据包并将它们发送给其他客户端。

我的服务器设置在同一台机器上的 Linux 虚拟机上。数据成功发送和接收大约 20 秒,然后一切暂停,无法发送或接收更多数据?这是因为我正在填充某种 TCP 队列吗?如果我在,有什么软件可以用来查看队列的满员情况吗?

当我关闭这些客户端时,服务器运行并接受消息。

【问题讨论】:

  • 我们需要了解更多有关此设置的信息,而不是您提供的信息。首先,数据包的速率是多少?

标签: linux sockets networking tcp


【解决方案1】:

除非每个人都在读取发送给他们的所有数据,否则这最终会由于 TCP 缓冲而停止。只有读取或关闭套接字才会清除缓冲区。

【讨论】:

  • 好的,所以我的测试连接没有接收到他们只是发送的数据。这不会导致数据包丢失吗?有没有办法避免这种情况?否则不能一些随机的人只是垃圾连接和洪水发送而没有接收来破坏任何人的服务器吗?
  • 不,它会导致数据被缓冲。我已经说过了。 TCP 不只是丢失数据。
  • 我不明白 - 你为什么只测试连接发送数据?为什么他们没有收到?您似乎违反了您自己的设计,(尽管您确实应该设计您的服务器以正确处理行为不端的客户端)。
  • 是的,对不起,EJP 我理解你。只是没有正确解释自己。不知道为什么我说那个帖子。如果他没有收到,有没有办法断开用户的连接?客户最终会收到 Martin James,但我想确保某些恶意软件不会使我的服务器死锁 :)
猜你喜欢
  • 2012-03-10
  • 2013-04-03
  • 2015-02-03
  • 2012-08-24
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2014-07-25
相关资源
最近更新 更多