Un punt final de Twisted fa la connexió TCP. Una fàbrica de WebSocket configurada per negociar un proxy encara necessita aquest punt final per connectar-se a l'intermediari.

Per a una aplicació Autobahn existent que utilitza l'ajudant estàndard:

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 és la classe de protocol WebSocket existent de l'aplicació. Mantén el reactor i la neteja de la connexió amb el cicle de vida d'aquesta aplicació. Per a un servei WSS públic permès a través d'un intermediari públic, la llista de proxys HTTP proporciona candidats per a l'amfitrió i el port del proxy de la fàbrica.

Per a una fàbrica configurada amb proxy, connectWS connecta TCP al proxy i conserva el context TLS de destinació per a la connexió segura posterior. No embolcalla inicialment la connexió HTTP normal del proxy amb el TLS de destinació.

Una disposició personalitzada de HostnameEndpoint i ClientService ha de preservar la mateixa divisió: primer connectar-se al proxy i després deixar que la fàbrica configurada negociï l'objectiu i estableixi el TLS necessari. Connectar el punt final directament a events.example mentre la seva fàbrica espera una conversa de proxy barreja aquests papers.

L'URL del WebSocket continua sent la destinació real del servei. El seu nom d'amfitrió també proporciona la identitat TLS; substituir-lo pel nom d'amfitrió del proxy no configura el servei segur previst.

Articles relacionats