python - 使用 twisted 运行两个网络服务器

标签 python twisted

我的任务是运行一个能够使用 websockets 和标准 HTTP 功能的 twisted 网络服务器。比如说,我需要使用 websockets 并连接到 hostname:9000。我需要获取网页并使用 hostname:80/webpage 来获取它。我应该怎么做?

我试过类似的方法:

    internet.TCPServer.__init__(self,9000, WebSocketFactory(factory))
    internet.TCPServer.__init__(self,80, server.Site(HandlerHTTP))

而且它不工作:80 端口上的服务器启动,但 9000 端口上的服务器不启动。

最佳答案

twisted.application.internet.TCPServer 的实例代表一个 TCP 服务器。您不能将它初始化两次并从中获取两个服务器。

我希望得到比您提供的更完整的代码片段:

from twisted.application import internet

class TwoServers(TCPServer):
    def __init__(self):
        internet.TCPServer.__init__(self,9000, WebSocketFactory(factory))
        internet.TCPServer.__init__(self,80, server.Site(HandlerHTTP))

这行不通。这就像尝试拥有一个包含两个整数的 int 或包含两个序列的 list。相反,创建两个 TCPServer 实例:

from twisted.application import service, internet

from websocket import WebSocketFactory

factory = ...
HandleHTTP = ...

holdMyServers = service.MultiService()
internet.TCPServer(9000, WebSocketFactory(factory)).setServiceParent(holdMyServers)
internet.TCPServer(80, server.Site(HandlerHTTP).setServiceParent(holdMyServers)

...

关于python - 使用 twisted 运行两个网络服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17805894/

相关文章:

python - 双绞套接字端口和类

python - 自下而上构建二叉树

来自两个数组的 Python linspace 限制

Python从列表中打印 float

python - 为什么这个python autobahn代码需要使用 'yield'关键字?

python - 在 Facebook 图形 API 上使用 twisted.web.client.Agent 时如何处理 OpenSSL.SSL.Error?

Python扭曲的irc : Wait for a whois reply inside privmsg method

带有子模块的 Python 模拟补丁

python - 如何在Django模型查询中添加比较模型本身两个字段的条件

python - 我可以将 Twisted GTK Reactor 与 UDP 接收器一起使用吗?