私は、Autobahn Twisted WebSocketResourceにアクセスする方法を示すために多くの例を探していますが、これを示す例は見つからないようです。ツイストルートリソースからAutobahn WebSocketResourceにアクセスするには?
Autobahn Twisted WebSocketResource exampleから、WebSocketServerFactory
をインスタンス化し、websocketプロトコルを設定してから、WebSocketResource(factory)
を使用してwebsocketリソースを作成するとわかります。あなたはWebSocketのリソースを持っていたら、これはそうのようなSite
インスタンスを作成する前に、メインのツイストWebリソースパスに追加することができます
class WebSocketProtocol(WebSocketServerProtocol):
def onConnect(self, request):
print("WebSocket connection request: {}".format(request))
def onMessage(self, payload, isBinary):
self.sendMessage(payload, isBinary)
class HttpResource(resource.Resource):
isLeaf = True
def render_GET(self, request):
return "<html><h1>Hello World!</h1></html>"
factory = WebSocketServerFactory(u"ws://127.0.0.1:8000")
factory.protocol = WebSocketProtocol
ws_resource = WebSocketResource(factory)
root = HttpResource()
root.putChild(b"ws", ws_resource)
site = Site(root)
だから私の理解がws://127.0.0.1:8000/ws
上のすべての要求は、WebSocketのリソースにルーティングされるということです。ただし、/ws
リソースは、ブラウザによって検出されないようです。 GETリクエストはうまく動作しますが、websocketリクエストはうまく動作しません。
限り行くのWebSocket要求として、ここで私はこの問題を解決する必要があると考えていたイベントの流れは、(私はそれらを実装するかどうかはわからない)です:
- ブラウザは
Upgrade
でGET
要求を送信しますヘッダーのwebsocketに送信します。 render_GET
メソッドのHttpResource
は、要求でこれを認識し、応答コードを101に設定するか、またはデータ通信を処理するためにws
リソースを見つける必要があります。 WebSocketは、WebSocketの要求を処理できるように、子リソースへのルートリソースから切り替えるにはどうすればよい
?
私の最初の考えは、ws
をチェックするためにルートリソースでgetChild
メソッドを使用することでした。 nameがws
の場合は、websocketリソースを返します。また、Twisted Web (isLeaf)は、ルートリソースクラスHttpResource
の下にあるisLeaf
属性が存在しないか、ルートリソース上の子にアクセスできないことを示しています。
助けがあれば助かります。あなたが提供できるあらゆる助けがあれば、事前にありがとうございます。
乾杯!
ブライアン