在随机端口上绑定 Tornado Webserver

lct*_*r30 3 python sockets webserver tornado

我需要在随机端口中运行 Tornado Web 服务器。

通常,如果套接字绑定到端口 0,操作系统会分配一个随机端口。

import socket
s = socket.socket()
s.bind(('',0))
print s.getsockname()
('0.0.0.0', 39727)
Run Code Online (Sandbox Code Playgroud)

其中 39727 是操作系统分配的端口。

我怎样才能使用龙卷风获得这种行为?

phi*_*hag 5

Tornado通过端口,你可以bind_sockets用0的端口调用,像这样:

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()
Run Code Online (Sandbox Code Playgroud)

请注意,您将获得 IPv4 和 IPv6 的不同端口号。如果您希望 IPv4 和 IPv6 在同一个端口上,请自己尝试端口号,或者提供一个列表,其中包含您在问题中创建的自己的套接字(创建一个 IPv6 套接字,将 IPV6_V6ONLY 设置为 0 以同时获取 IPv6 和 IPv4)相同的插座)在sockets上面的地方。