【问题标题】:Massive holding open of TCP/IP sockets大量保持 TCP/IP 套接字打开
【发布时间】:2012-10-02 10:56:36
【问题描述】:

我想创建一个服务器基础架构,允许 500 个客户端同时连接所有客户端并具有无限期的连接。计划是让客户端连接到服务器上的 TCP/IP 套接字并让它们保持连接,服务器随机向客户端发送数据,客户端随机向服务器发送数据,类似于小型 MMOG,但几乎没有任何数据.与每个客户端每 15-30 秒进行一次 TCP 轮询相比,我提出了这个计划。

我的问题是,在保持这些连接打开的情况下,这是否会导致大量服务器带宽在空闲时使用?这是不深入 TCP 内部的最佳方法吗?

【问题讨论】:

  • 仅供参考:有可能维持 > 2 millions concurrent sockets 这使得 500 相当小,而不是大量。
  • 根据我的经验,“海量”大约是 36k 连接,因为这些是在多服务器世界中的单个服务器上看到的数字。我想从 500 开始谦虚,但 15k 对于最终产品来说更现实。

标签: sockets tcp


【解决方案1】:

TCP 在空闲时不使用带宽,如果启用了“keep-alive”,则可能每隔一段时间(默认为 2 小时)使用几个字节。

500 个连接不算什么,尽管epoll() 是减少系统开销的好选择。 5000 个连接可能会开始成为问题。

【讨论】:

  • 到目前为止,通过我的测试,我与单个服务器的连接达到了 15k,CPU 使用率似乎为 0.1%。我应该在哪里寻找从 5k 开始的问题?
  • 5k 没什么特别的;我刚刚以原始数字的 10 倍选取它,作为一个例子,说明“500 个连接”对于现代机器来说是多么微不足道。
【解决方案2】:

带宽不是您主要关心的问题,但您可以打开的连接数量是有限制的(尽管它非常高)。

但如果每 15 秒轮询一次足够快,我会认为保持连接打开是一种浪费。

【讨论】:

  • 浪费什么?对于 500 个客户端,每 15 秒连接一次的开销将导致发送更多的数据,而不仅仅是让连接保持打开状态并每 2 小时发送一次保持活动状态。
  • 如果它保持在 500,也许,但 MMOG 可能会快速增长。但是当然,到那个时候,无论如何都需要几台额外的服务器,如果 OP 能走那么远的话。到目前为止,似乎已经完成了大量的研究,我怀疑这是否会成为新的 WOW。
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 2012-11-23
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
相关资源
最近更新 更多