Python:异步TCP SocketServer
我在查找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
因为客户端和服务器是在同一个脚本里实现的,所以端口是可以知道的。在实际应用中,你应该为你的守护进程指定一个端口。这样不仅可以让你的客户端知道该连接哪个端口,你自己也需要知道这个端口,以便在客户端和服务器之间打开防火墙。