如何防止在socket服务器满时锤击
How to prevent hammering on socket server when full?
我正在编写一个套接字服务器,旨在仅承载少量客户端连接。
当用户尝试连接时,我的服务器可以做以下两件事之一:
- 接收()传入的套接字连接,通知用户服务器已满,然后关闭()连接;
- 如果连接列表已满,请忽略连接尝试。
我真的不喜欢第二个选择,但在我看来,第一个会带来麻烦,玩家(因为这是一个游戏)可能会试图锤击服务器。然而,如果我简单地忽略这些尝试,在这方面就不会有任何问题。
我应该采取什么方法?
我建议通知客户。
如果它不是一个(或几个)程序疯狂地敲打,并行地打开大量连接并真正尝试的话,那么hammer不会使服务器崩溃。
让用户点击按钮连接,如果服务器已满,等待一秒钟(或更长时间),然后让玩家重试,这样客户端(玩家)会很高兴(他在控制),他不能超过每秒一次锤击(谁会坐在那里手动锤击几个小时)。
您可以为传入的连接保留一个队列,并根据您决定设置的连接池只接受()少数连接。
。E,您可以决定一次接受5个连接,并将其余的传入连接保存在队列中;并根据您当前的状态采取行动-一旦您有一个空闲连接,从队列中接受一个连接。
第三个选项:使用iptables限制传入连接的数量
相关文章:
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 调试编译的服务器在数据库打开时崩溃
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 使用 Libssh 将文件从服务器复制到客户端:分配文件复制目标路径时出现问题
- 从 tcp 服务器打开 8MP H264 流时出现问题
- 磁盘已满时,Boost日志崩溃
- QTCPSOCTED数据传输在读取缓冲区已满时停止,并且在释放时不会恢复
- 如何知道何时没有进一步的响应在使用SSL_READ()时从服务器接收
- 当TCP TX缓冲区填满时,boost::asio中会发生什么
- 当接收缓冲区几乎满时,阻止UDP数据包被部分截断
- 执行析构函数时,服务器应用程序总是崩溃
- 缓冲区已满时清除字符串缓冲区.这是什么图案
- C++-静态列表,当节点满时从头部弹出
- Apache Thrift:在列表前使用"optional"时,C++服务器似乎没有正确返回它
- 当底部4GB已满时,FileDialog崩溃
- 如何防止在socket服务器满时锤击
- 当客户端关闭连接时,服务器套接字完成
- 当我试图在远程Linux节点上更改Eclipse中的设置时,X服务器崩溃了
- 当客户端第二次连接时没有服务器OnAccept通知