【问题标题】:Twisted web server and Autobahn WebSocket at the same time, same portTwisted Web 服务器和 Autobahn WebSocket 同时,相同的端口
【发布时间】:2014-11-12 19:14:15
【问题描述】:

我有一个使用 Twisted 和 Autobahn 侦听端口 80 上的 WebSocket 连接的服务器。当客户端不想使用 WebSocket 时,我想让它也提供静态 HTML 页面。使用 Twisted 和 Autobahn 是否可以同时做这两件事?

【问题讨论】:

    标签: twisted autobahn


    【解决方案1】:

    当然,看看herehere。您可以运行 Twisted Web 并在路径上添加基于 Autobahn 的 WebSocket Twisted Web 资源。您可以将任意数量的 Twisted Web 资源添加到资源树中。

    简单来说,该技术是通过调用 startFactory() 手动启动 WebSocketServerFactory,然后将其包装在 autobahn.twisted.resource.WebSocketResource 资源中,然后您可以在 Twisted Web 层次结构中的任何位置向 putChild 注册。

    【讨论】:

      【解决方案2】:

      我认为您必须在组合中添加 haproxy。如果您只想使用扭曲和高速公路,那么我认为您不能共享端口。话虽如此,我的 websockets 和 web 服务器都在同一个外部端口上监听。我不得不使用 haproxy 来解决这个问题,不过……haproxy 处理入站连接,然后根据它从环境中提取的内容分配连接。每个环境都不一样。基本上,你让 haproxy 运行,然后让你的 web 服务和 web socket 监听不同的私有端口。就我而言,我将我的 Web 套接字服务器放在 127.0.0.1:9000 上,并将我的 Web 服务放在 127.0.0.1:8080 上。然后为 haproxy 的配置创建一个 haproxy.conf 文件,在本例中,类似于:

      global
          maxconn 100
          mode http
      frontend myfrontend
          bind *:80
          acl is_websocket hdr(Upgrade) -i WebSocket
          use_backend ws if is_websocket
          default_backend mybackend
      backend mybackend
           server s3 127.0.0.1:8080
      backend ws
          timeout server 600s
          reqrep ^Host:\ .* \0:9000
          server ws1 127.0.0.1:9000
      

      我不得不从 haproxy.conf 文件中删除一堆不相关的东西,但这让我明白了。对我来说,只有一个端口从外部可见而不是管理两个端口,这一点很重要。

      haproxy 太棒了! -g

      【讨论】:

      • 你绝对不需要 haproxy。如果询问者对运行两个单独的进程感到满意,这可能是一个合理的解决方案,但 autobahn 已集成到 Twisted 中,因此您甚至不需要两个进程。
      • 正如@Glyph 所说,不需要haproxy。 Autobahn 有一个将 WebSocket 作为 Twisted Web 资源提供的包装器。
      • @oberstet 我已经在使用带有 Autobahn 和 Twisted 的 WebSocket。我想要一个在同一进程中使用常规静态 HTML 服务器的示例。
      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2021-02-11
      • 1970-01-01
      相关资源
      最近更新 更多