我正在用 python 制作一个套接字 TCP 服务器,它可以同时处理多个连接。 所以我定义了一个字典来保存客户端套接字地址,这样我就可以访问它们并轻松地在客户端之间传输信息。但我想知道是否有更好的方法将它们连接在一起而无需同时保持例如一百个连接,这真的很接近 keep-alive 在 http 连接中,我认为我们不应该在整个连接时间内过度使用.那么你们有什么想法吗?
这就是代码的样子:
def run(self, server, port):
while True:
server.listen(5)
conn, addr = server.accept()
self.connectionMap[str(conn.getpeername())] = conn
print('New connection:', conn.getpeername())
Thread_(target=self.manageIndividual, args=([conn, addr, port]))
保持 100 个连接打开没有错,尤其是当它们大部分空闲时。
过去,打开 100 个线程曾经是一个问题,因为(在许多操作系统上)每个线程保留 1MB 的内存。因此希望每个线程处理许多连接。但是现在内存充足,所以它仍然不是问题。
过去,在一个线程上打开 1000 个连接也曾经是一个问题,因为没有好的方法来做到这一点,但现在有了
epoll
(Linux)和 I/O Completion Ports(Windows) .
但那些都是历史问题。现在你可以摆脱数千个线程,并且在一个线程上处理数万个连接也没有问题。
这个答案必然是肤浅的,因为很难证明一个普遍的否定。为了真正证明为什么这不是一个坏主意,我必须知道你为什么这么认为,然后反驳它。