2017-06-17 92 views
4

当我使用aiohttp.web.run_app(. . ., port=0)时,我假设它选择一个任意可用的端口来服务。它是否正确?如果是这样,有什么方法可以找出它选择了哪个端口如何确定哪个端口aiohttp选择给定端口= 0时

+0

是这假设是正确 –

+0

如果它的工作原理有点像'flask',它会选择一个随机端口....启动烧瓶口0将选择随机高端口号。 –

+0

对,但我怎么知道哪个?应用程序或循环中是否有属性? – abingham

回答

2

您使用server.sockets如下面的代码:

@asyncio.coroutine 
def status(request): 
    """Check that the app is properly working""" 
    return web.json_response('OK') 


app = web.Application() # pylint: disable=invalid-name 
app.router.add_get('/api/status', status) 


def main(): 
    """Starts the aiohttp process to serve the REST API""" 
    loop = asyncio.get_event_loop() 
    # continue server bootstraping 
    handler = app.make_handler() 
    coroutine = loop.create_server(handler, '0.0.0.0', 0) 
    server = loop.run_until_complete(coroutine) 
    print('Serving on http://%s:%s' % server.sockets[0].getsockname()) # HERE! 
    try: 
     loop.run_forever() 
    except KeyboardInterrupt: 
     pass 
    finally: 
     server.close() 
     loop.run_until_complete(server.wait_closed()) 
     loop.run_until_complete(handler.finish_connections(1.0)) 
     loop.close() 
+0

谢谢!这完美的诀窍。 – abingham