Un punto final de Twisted realiza la conexión TCP. Una fábrica de WebSocket configurada para negociar un proxy sigue necesitando ese punto final para conectarse al intermediario.

Para una aplicación Autobahn existente que usa su auxiliar 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 es la clase de protocolo WebSocket existente de la aplicación. Mantenga el reactor y la limpieza de la conexión dentro del ciclo de vida de esa aplicación. Para un servicio WSS público permitido a través de un intermediario público, la lista de proxies HTTP proporciona candidatos para el host y el puerto del proxy de la fábrica.

Para una fábrica configurada con proxy, connectWS conecta TCP al proxy y conserva el contexto TLS de destino para la conexión segura posterior. No envuelve inicialmente la conexión HTTP normal del proxy en el TLS de destino.

Una disposición personalizada de HostnameEndpoint y ClientService debe preservar la misma división: primero conectar con el proxy y luego dejar que la fábrica configurada negocie el objetivo y establezca el TLS necesario. Conectar el punto final directamente a events.example mientras su fábrica espera una conversación de proxy mezcla esos papeles.

La URL de WebSocket sigue siendo el destino real del servicio. Su nombre de host también aporta la identidad TLS; sustituirlo por el nombre de host del proxy no configura el servicio seguro previsto.

Artículos relacionados