Telnet服务器:保持连接打开是一种好习惯吗?

时间:2017-10-06 20:28:05

标签: python sockets server connection telnet

我正在使用一个应该通过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是什么)或者这是一种不好的做法?

1 个答案:

答案 0 :(得分:2)

number请求中的

listen(number)限制了待处理连接请求的数量。

连接请求从OS收到的初始SYN请求挂起,直到您调用accept套接字方法。因此number不会限制开放(已建立)的连接数,但会限制 SYN_RECV 状态下的连接数。

不要回答传入连接是个坏主意,因为:

  • 客户端将重新发送SYN请求,直到收到回复SYN
  • 当您的服务器不可用且它只是在队列中时,客户端无法区分情况。

更好的想法是回答连接,但是在拒绝原因的情况下向客户端发送一些消息然后关闭连接。