Koncový bod Twisted provádí TCP spojení. Továrna WebSocket nakonfigurovaná k vyjednávání proxy přesto potřebuje tento koncový bod, aby se připojila k prostředníkovi.

Pro existující aplikaci Autobahn používající standardního pomocníka:

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 je existující třída protokolu WebSocket aplikace. Reaktor a uklízení spojení udržujte v životním cyklu této aplikace. Pro veřejnou službu WSS povolenou přes veřejného prostředníka poskytuje seznam HTTP proxy kandidáty pro hostitele a port proxy továrny.

U továrny nakonfigurované pro proxy připojuje connectWS TCP k proxy a zachovává kontext TLS cíle pro pozdější zabezpečené spojení. Zpočátku nezabalí běžné spojení HTTP proxy do TLS cíle.

Vlastní sestava HostnameEndpoint a ClientService musí zachovat stejné rozdělení: nejprve se připojit k proxy, potom nechat nakonfigurovanou továrnu vyjednat cíl a navázat požadované TLS. Připojení koncového bodu přímo k events.example, zatímco jeho továrna očekává rozhovor přes proxy, tyto role míchá.

URL WebSocket zůstává skutečným cílem služby. Jeho název hostitele také poskytuje identitu TLS; nahrazení názvem hostitele proxy nenakonfiguruje zamýšlenou zabezpečenou službu.

Související články