将 Tornado Web 服务器绑定到随机端口。

3
我需要在随机端口上运行tornado Web服务器。
通常,如果套接字绑定到端口0,则操作系统会分配一个随机端口。
import socket
s = socket.socket()
s.bind(('',0))
print s.getsockname()
('0.0.0.0', 39727)

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

如何在tornado中实现这种行为?

1个回答

6
龙卷风传递给端口,您可以使用端口为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,请自行尝试端口号,或者像问题中创建的那样提供一个包含自己套接字列表的列表(创建一个设置为0的IPv6套接字以获取同时支持IPv6和IPv4的套接字),替换上述代码中的sockets

有什么想法可以确定它绑定到了哪个端口? - Gattster
1
@Gattster 已更新答案。 - phihag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接