Python:异步TCP SocketServer

4 投票
4 回答
4398 浏览
提问于 2025-04-15 16:10

我在查找http://docs.python.org/library/socketserver.html,想用Python的socketserver来处理异步请求。在页面底部有一个例子,但我看不太懂。它说要使用端口0,这样会分配一个随机的未使用端口。但是如果客户端和服务器不在同一个程序里,怎么知道用哪个端口呢?我不太明白怎么才能把这个用得上。

4 个回答

2

你需要在完成 bind 操作后获取分配给 socketserver 的端口:在这种情况下,你可以通过 ip, port = server.server_address 来获取。

如果你想创建一个不指定端口的服务器,可以使用任意端口:操作系统会自动分配一个可用的端口。

当然,也必须有方法来指定要绑定到哪个端口。

5

在你提到的例子中,他们是在获取端口:

# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0

server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address

不过,如果你真的想认真写异步处理的代码,建议你去看看 www.twistedmatrix.com :)

9

因为客户端和服务器是在同一个脚本里实现的,所以端口是可以知道的。在实际应用中,你应该为你的守护进程指定一个端口。这样不仅可以让你的客户端知道该连接哪个端口,你自己也需要知道这个端口,以便在客户端和服务器之间打开防火墙。

撰写回答