python - 如何设置SocketServer的最大连接数

标签 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 个客户端。

最佳答案

最简单的解决方案是计算事件连接数,并在达到限制时停止为新连接提供服务。缩小规模是新的 TCP 连接被接受然后关闭。希望没问题。

我在不基于SocketServer的服务器中使用的代码基本上如下所示:

需要一个变量:

accepted_sockets = weakref.WeakSet()

WeakSet 的优点是不再使用的元素会被自动删除。

一个简单的辅助函数:

def count_connections():
     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等),但是希望有帮助。

关于python - 如何设置SocketServer的最大连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35081533/

相关文章:

python-2.7 - 如何打印 Argparse 主解析器的帮助(用法)部分而不是子解析器的用法?

python - 在 jinja2 中创建并填充字典

Java:BufferedReader 读取多于一行?

python - Kivy:滚动缩放

python - 使用 matplotlib.pyplot 绘制多个字典值

java - 使用 javanio 从阻塞 I/O 转变为非阻塞 I/O

c - Linux 中的段错误(C 中的套接字编程 (TCP))

Python Numpy One 热到区域

python - Django 管理列表过滤器删除所有选项

python - 在 Python 中停止线程池中的进程