Conectar o Autobahn Twisted WSS através de um proxy HTTP
Deixe o connectWS coordenar o endpoint do proxy e o TLS de destino posterior em vez de abrir um endpoint direto ao lado de uma fábrica consciente do proxy.
Um endpoint Twisted realiza a conexão TCP. Uma fábrica WebSocket configurada para negociar um proxy ainda precisa desse endpoint para se conectar ao intermediário.
Para uma aplicação Autobahn existente que usa o seu auxiliar padrão:
from autobahn.twisted.websocket import WebSocketClientFactory, connectWS
from twisted.internet import ssl
factory = WebSocketClientFactory(
'wss://events.example/channel',
proxy={'host': 'proxy.example', 'port': 8080},
)
factory.protocol = ApplicationProtocol
connector = connectWS(
factory,
contextFactory=ssl.optionsForClientTLS('events.example'),
timeout=10,
)
ApplicationProtocol é a classe de protocolo WebSocket existente da aplicação. Mantenha o reactor e a limpeza da conexão no ciclo de vida dessa aplicação. Para um serviço WSS público permitido através de um intermediário público, a lista de proxies HTTP fornece candidatos para o host e a porta do proxy da fábrica.
Para uma fábrica configurada com proxy, o connectWS liga o TCP ao proxy e conserva o contexto TLS de destino para a conexão segura posterior. Não envolve inicialmente a ligação HTTP normal do proxy no TLS de destino.
Uma disposição personalizada de HostnameEndpoint e ClientService deve preservar a mesma divisão: ligar primeiro ao proxy e depois deixar a fábrica configurada negociar o alvo e estabelecer o TLS necessário. Ligar o endpoint diretamente a events.example enquanto a fábrica espera uma conversa de proxy mistura esses papéis.
O URL do WebSocket permanece o destino real do serviço. O seu nome de host também fornece a identidade TLS; substituí-lo pelo nome de host do proxy não configura o serviço seguro pretendido.