如何防止在socket服务器满时锤击

How to prevent hammering on socket server when full?

本文关键字:满时锤 服务器 socket 何防止      更新时间:2023-10-16

我正在编写一个套接字服务器,旨在仅承载少量客户端连接。

当用户尝试连接时,我的服务器可以做以下两件事之一:

  1. 接收()传入的套接字连接,通知用户服务器已满,然后关闭()连接;
  2. 如果连接列表已满,请忽略连接尝试。

我真的不喜欢第二个选择,但在我看来,第一个会带来麻烦,玩家(因为这是一个游戏)可能会试图锤击服务器。然而,如果我简单地忽略这些尝试,在这方面就不会有任何问题。

我应该采取什么方法?

我建议通知客户。

如果它不是一个(或几个)程序疯狂地敲打,并行地打开大量连接并真正尝试的话,那么hammer不会使服务器崩溃。

让用户点击按钮连接,如果服务器已满,等待一秒钟(或更长时间),然后让玩家重试,这样客户端(玩家)会很高兴(他在控制),他不能超过每秒一次锤击(谁会坐在那里手动锤击几个小时)。

您可以为传入的连接保留一个队列,并根据您决定设置的连接池只接受()少数连接。

。E,您可以决定一次接受5个连接,并将其余的传入连接保存在队列中;并根据您当前的状态采取行动-一旦您有一个空闲连接,从队列中接受一个连接。

第三个选项:使用iptables限制传入连接的数量