如何在SocketServer中设置最大连接数
How to set max number of connections in SocketServer
我正在尝试寻找一种方法来设置限制 - SocketServer
中的最大连接数。
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
daemon_threads = True
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
some code
有什么方法可以做到吗?例如最多 3 个客户端。
最简单的解决方案是对活动连接进行计数,并在达到限制时停止为新连接提供服务。缩减是接受新的 TCP 连接,然后关闭。希望没关系。
我在不基于 SocketServer
的服务器中使用的代码基本上如下所示:
需要一个变量:
accepted_sockets = weakref.WeakSet()
WeakSet 的优点是不再使用的元素会自动删除。
一个简单的辅助函数:
def count_connections(self):
return sum(1 for sock in accepted_sockets if sock.fileno() >= 0)
请求处理代码中的用法很简单:
if count_connections() >= MAX_CONN:
_logger.warning("Too many simultaneous connections")
sock.close()
return
accepted_sockets.add(sock)
# handle the request
你必须调整它以与 SocketServer
一起使用(例如,TCP 套接字在那里被称为 request
,服务器可能处理 socket.close,等等),但希望它有帮助。
我正在尝试寻找一种方法来设置限制 - SocketServer
中的最大连接数。
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
daemon_threads = True
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
some code
有什么方法可以做到吗?例如最多 3 个客户端。
最简单的解决方案是对活动连接进行计数,并在达到限制时停止为新连接提供服务。缩减是接受新的 TCP 连接,然后关闭。希望没关系。
我在不基于 SocketServer
的服务器中使用的代码基本上如下所示:
需要一个变量:
accepted_sockets = weakref.WeakSet()
WeakSet 的优点是不再使用的元素会自动删除。
一个简单的辅助函数:
def count_connections(self):
return sum(1 for sock in accepted_sockets if sock.fileno() >= 0)
请求处理代码中的用法很简单:
if count_connections() >= MAX_CONN:
_logger.warning("Too many simultaneous connections")
sock.close()
return
accepted_sockets.add(sock)
# handle the request
你必须调整它以与 SocketServer
一起使用(例如,TCP 套接字在那里被称为 request
,服务器可能处理 socket.close,等等),但希望它有帮助。