如何在SocketServer中设置最大连接数

时间:2016-01-29 09:56:31

标签: python python-2.7 sockets socketserver

我试图找到一种方法来设置限制 - SocketServer中的最大连接数。

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    daemon_threads = True


class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        some code 

有什么方法可以做到吗?例如最多3个客户。

1 个答案:

答案 0 :(得分: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等),但希望它有所帮助。