Bind Tornado Webserver на случайном порте - PullRequest
2 голосов
/ 02 марта 2012

Мне нужно запустить веб-сервер торнадо в случайном порту.

Обычно, если сокет привязан к порту 0, ОС назначает случайный порт.

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

, где 39727 - порт, назначенный ОС.

как я могу получить такое поведение с помощью торнадо?

1 Ответ

4 голосов
/ 02 марта 2012

Торнадо проходит через порт, вы можете позвонить 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()

Обратите внимание, что вы получите разные номера портов для IPv4и IPv6.Если вы хотите, чтобы IPv4 и IPv6 находились на одном и том же порту, либо попробуйте сами номера портов, либо предоставьте список со своим собственным сокетом, созданным, как в вопросе (создайте сокет IPv6 с IPV6_V6ONLY, установленным в 0, чтобы получить оба IPv6 и IPv4 ната же розетка) вместо sockets в вышеприведенном.

...