我有一个服务器,它使用Twisted和Autobahn在端口80上侦听WebSocket连接。我想让它也提供静态HTML页面,因为当客户端不想使用WebSocket时。是否可以使用Twisted和Autobahn同时做两件事?
答案 0 :(得分:5)
当然,看看here和here。您可以运行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