扭曲的Web服务器和Autobahn WebSocket同时使用相同的端口

时间:2014-11-12 19:14:15

标签: twisted autobahn

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

我认为你必须在混合中加入haproxy。如果你想使用扭曲和高速公路,那么我不认为你可以共享端口。话虽如此,我已经让我的websockets和web服务器都在同一个外部端口上监听。我不得不使用haproxy来完成这个技巧,但是... haproxy处理入站连接,然后根据它从环境中提取的东西来分配连接。每个环境都不同。基本上,您可以运行haproxy,然后让您的Web服务和Web套接字侦听私有的不同端口。在我的情况下,我把我的网络套接字服务器放在127.0.0.1:9000上,我的网络服务放在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