gpt4 book ai didi

python - 我可以让 CherryPy 找到它自己的可用端口吗?

转载 作者:行者123 更新时间:2023-11-30 23:30:31 25 4
gpt4 key购买 nike

出于测试目的,我在同一台计算机上运行许多 Web 服务器。我不想处理服务器端口冲突,而是想让服务器简单地向操作系统询问可用端口,然后告诉我它们得到了什么。

我可以通过登录到控制台或写入指定的临时文件(尚不确定)将端口传回调用者,但知道端口号是棘手的部分。

目前,基于 WSGI 的服务器正在启动:

  cherrypy.quickstart(dev_server, config=_GetConfig(options))

配置将包含以下内容:

{ 'global':
{ <snip>
'server.socket_host': '0.0.0.0',
'server.socket_port': int(options.port)
},
<snip>
}

有什么办法可以用 CherryPy 做到这一点吗?

我假设我可以将端口设置为“0”以自动选择它,但这并没有给我提供报告它的方法。

最佳答案

基本思想是:

  • 绑定(bind)到端口 0。
  • 询问套接字您最终使用了哪个端口。
  • 以某种方式报告该端口。

第一部分从根本上取决于您如何构建、启动和配置服务器。 CherryPy 非常灵活,具体细节会根据您的使用方式而有所不同。

第二部分要求您使用某种机制来编写启动服务器的顶级代码,而不是无需任何代码即可自动启动服务器的机制之一。这是因为,在启动服务器之前,您需要手动bind服务器获取其套接字。创建并绑定(bind)套接字后,getsockname将为您提供它最终绑定(bind)到的地址和端口。

第三部分显然可以像你想要的那样简单或困难。

<小时/>

这是一个简单的示例,您甚至可以通过交互式解释器执行此操作:

def app(env, start):
start('200 OK', [('Content-type', 'text/plain')])
return ['Hello, world!']
server = cherrypy.wsgiserver.CherryPyWSGIServer(('0.0.0.0', 0), app,
server_name='localhost')
server.bind(socket.AF_INET, socket.SOCK_STREAM)
addr, port = server.socket.getsockname()
print(port)
server.start()
<小时/>

您可能还想查看cherrypy.process.servers及其 ServerAdapter,它允许您从一个位置管理多个服务器,而不是拥有一堆必须手动协调的独立服务器。

关于python - 我可以让 CherryPy 找到它自己的可用端口吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com