使用 Twisted python 是不是有一种机制可以找到类似于 socket.open 的空闲端口?

Posted

技术标签:

【中文标题】使用 Twisted python 是不是有一种机制可以找到类似于 socket.open 的空闲端口?【英文标题】:With Twisted python is there a mechanism to find a free port similar to socket.open?使用 Twisted python 是否有一种机制可以找到类似于 socket.open 的空闲端口? 【发布时间】:2020-04-02 20:10:27 【问题描述】:

问题

类似于这个问题 - On localhost, how do I pick a free port number?

除了 Twisted 抽象出对诸如 listenTCPUDP 等价的反应器方法后面的套接字的访问之外,我还没有找到一种机制,我可以告诉反应器找到一个空闲的套接字并绑定/监听它。

【问题讨论】:

通常你不想为服务器使用随机端口,否则你将如何连接到它。如果你真的想要一个随机端口,那么生成一个随机数,给它分配一个socket,然后测试是否成功。 @smac89 最初它与 0MQ 有关,但我放弃了这部分问题并修复了大部分标签。 @ron 我写了一个桌面进程管理器,它可以按需处理各种 twisted.web.Site 应用程序,它们都向 stderr 发出一个魔术令牌,告诉管理器应用程序正在哪个端口上运行。同样,我正在开发一个项目,该项目使用多个 0mq 侦听套接字来协调多个进程之间的工作,并且它们都检查诸如 hadoop 的 zookeeper 之类的东西以报告它们的地址和端口号 【参考方案1】:

像这样:

reactor.listenTCP(0, ...)

【讨论】:

谢谢,我已经阅读了大量 Twisted 的源代码,但我没有看到。 有没有合适的方法来查找端口号?我知道listenTCP返回的对象有一个私有属性_realPortNumber,但是有没有办法不使用它呢? P.S.这是针对 HTTP 客户端的 GET 方法的单元测试,其想法是找到一个未使用的端口,在其上发布一个 Web 服务器,然后获取它。 @PeterWestlake 最简单的是从listenTCP抓取返回的对象-twistedmatrix.com/documents/current/api/… 单元测试可能不会绑定真正的 HTTP 端口。也许看看treq的RequestTraversalAgent。

以上是关于使用 Twisted python 是不是有一种机制可以找到类似于 socket.open 的空闲端口?的主要内容,如果未能解决你的问题,请参考以下文章

您如何通过 Python(而不是通过 Twisted)运行 Twisted 应用程序?

您如何通过Python(而不是通过Twisted)运行Twisted应用程序?

Python pip安装Scrapy,报错Twisted

Twisted 是不是有广泛使用的 STOMP 适配器?

Python/Erlang:Twisted、Stackless、Greenlet、Eventlet、协程有啥区别?它们是不是类似于 Erlang 进程?

Twisted on Python3的真实现状是什么?