Un punto final de Twisted realiza a conexión TCP. Unha fábrica de WebSocket configurada para negociar un proxy segue necesitando ese punto final para conectarse ao intermediario.

Para unha aplicación Autobahn existente que usa o seu axudante estándar:

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 clase de protocolo WebSocket existente da aplicación. Manteña o reactor e a limpeza da conexión dentro do ciclo de vida desa aplicación. Para un servizo WSS público permitido a través dun intermediario público, a lista de proxies HTTP fornece candidatos para o host e o porto do proxy da fábrica.

Para unha fábrica configurada con proxy, connectWS conecta TCP ao proxy e conserva o contexto TLS de destino para a conexión segura posterior. Non envolve inicialmente a conexión HTTP normal do proxy no TLS de destino.

Unha disposición personalizada de HostnameEndpoint e ClientService debe preservar a mesma división: primeiro conectar co proxy e despois deixar que a fábrica configurada negocie o obxectivo e estableza o TLS necesario. Conectar o punto final directamente a events.example mentres a súa fábrica espera unha conversa de proxy mestura eses papeis.

O URL do WebSocket segue sendo o destino real do servizo. O seu nome de host tamén fornece a identidade TLS; substituílo polo nome de host do proxy non configura o servizo seguro previsto.

Artigos relacionados