2017-10-06 158 views
0

我正在使用NetHack克隆,它应该像许多NetHack服务器一样通过Telnet进行播放。正如我所说,这是一个克隆,所以它是从头开始编写的,在Python上编写。Telnet服务器:保持连接打开的好习惯吗?

我已经从我写了前段时间的SMTP服务器设置我的socket服务器重用代码和所有的突然我的关注跃升到代码这一行:

s.listen(15) 

我的服务器被设计成能够连接到15个同步客户端,以防与任何数据交换时间过长,但理想情况下,listen(1)listen(2)就足够了。但这种情况是不同的。

当你telnet他们的NetHack服务器时,发生在Alt.org上,连接到我的服务器的人应该能够通过一个telnet会话远程播放我的roguelike,所以我猜这个连接不应该被中断。然而,我读过here

[...]如果你真的持有超过128排队的连接请求你是一个 )时间太长对它们进行处理或b)需要一个重量级 分布式服务器或c)遭受DDoS攻击。

在这里进行的更好的做法是什么?我应该保持每个连接打开,直到连接的用户断开连接或有其他方式吗?我应该去listen(128)(或者我的系统的socket.SOMAXCONN)吗?或者这是一个不好的做法?

回答

2

number in listen(number)请求限制数等待连接请求。

连接请求是正在等待从OS收到的初始SYN请求,直到您调用accept套接字方法。所以number不限制打开(建立)的连接号码,但它限制了在SYN_RECV状态中的连接数目。

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

  • 客户端会重新发送SYN请求被接收的答案SYN直到
  • 当你的服务器不可用,它只是在客户端无法区分情况队列。

更好的主意是回答连接,但发送一些消息给拒绝原因然后关闭连接的客户端。

+0

太棒了!不知道。非常感谢你! – Maralis