我正在使用一个应该通过Telnet播放的NetHack克隆,就像许多NetHack服务器一样。正如我所说的,这是一个克隆,所以它是从头开始编写的。
我已经设置了我的套接字服务器重用我前一段时间写过的SMTP服务器中的代码,所有突然我的注意力都跳到了这一特定的代码行:
s.listen(15)
我的服务器旨在能够连接到15个并发客户端,以防万一与任何数据交换花费太长时间,但理想情况下listen(1)
或listen(2)
就足够了。但这种情况不同。
当您使用Alt.org telnet他们的NetHack服务器时,连接到我的服务器的人应该能够通过单个telnet会话远程播放我的roguelike,所以我猜这个连接不应该被中断。然而,我已经阅读了here
[...]如果您确实持有超过128个排队连接请求 a)花费太长时间来处理它们或b)需要重量级 分布式服务器或c)遭受DDoS攻击。
在这里进行的更好的做法是什么?我应该保持每个连接都打开,直到连接的用户断开连接或有其他方式吗?我应该选择listen(128)
(或我的系统的socket.SOMAXCONN
是什么)或者这是一种不好的做法?
答案 0 :(得分:2)
number
请求中的 listen(number)
限制了待处理连接请求的数量。
连接请求从OS收到的初始SYN请求挂起,直到您调用accept
套接字方法。因此number
不会限制开放(已建立)的连接数,但会限制 SYN_RECV 状态下的连接数。
不要回答传入连接是个坏主意,因为:
更好的想法是回答连接,但是在拒绝原因的情况下向客户端发送一些消息然后关闭连接。