在随机端口上绑定Tornado Webserver

时间:2012-03-02 16:09:18

标签: python sockets webserver tornado

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

通常,如果套接字绑定到端口0,则os分配一个随机端口。

import socket
s = socket.socket()
s.bind(('',0))
print s.getsockname()
('0.0.0.0', 39727)

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

如何使用龙卷风获得此行为?

1 个答案:

答案 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