我需要在随机端口中运行龙卷风Web服务器。
通常,如果套接字绑定到端口0,则os分配一个随机端口。
import socket
s = socket.socket()
s.bind(('',0))
print s.getsockname()
('0.0.0.0', 39727)
其中39727是操作系统分配的端口。
如何使用龙卷风获得此行为?
答案 0 :(得分:4)
Tornado在端口上传递,您可以使用端口0调用bind_sockets
,如下所示:
import tornado.httpserver
import tornado.ioloop
import tornado.netutil
import tornado.web
app = tornado.web.Application()
sockets = tornado.netutil.bind_sockets(0, '')
server = tornado.httpserver.HTTPServer(app)
server.add_sockets(sockets)
for s in sockets:
print('Listening on %s, port %d' % s.getsockname()[:2])
tornado.ioloop.IOLoop.instance().start()
请注意,您将获得IPv4和IPv6的不同端口号。如果您希望IPv4和IPv6位于同一端口上,请自行尝试端口号,或者提供一个列表,其中包含您自己创建的套接字(创建一个IPV6_V6ONLY设置为0的IPv6套接字以获取IPv6和IPv4)相同的套接字)代替上面的sockets
。