Koncový bod Twisted vykonáva TCP spojenie. Továreň WebSocket nakonfigurovaná na vyjednávanie proxy napriek tomu potrebuje tento koncový bod na pripojenie k prostredníkovi.

Pre existujúcu aplikáciu Autobahn používajúcu štandardné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úca trieda protokolu WebSocket aplikácie. Reaktor a čistenie spojenia udržujte v životnom cykle tejto aplikácie. Pre verejnú službu WSS povolenú cez verejného prostredníka poskytuje zoznam HTTP proxy kandidátov pre hostiteľa a port proxy továrne.

Pri továrni nakonfigurovanej s proxy pripája connectWS TCP k proxy a zachováva kontext TLS cieľa pre neskoršie zabezpečené spojenie. Spočiatku nezabaľuje bežné spojenie HTTP proxy do TLS cieľa.

Vlastné usporiadanie HostnameEndpoint a ClientService musí zachovať rovnaké rozdelenie: najprv sa pripojiť k proxy, potom nechať nakonfigurovanú továreň vyjednať cieľ a nadviazať požadovaný TLS. Pripojenie koncového bodu priamo k events.example, kým jeho továreň očakáva rozhovor cez proxy, tieto úlohy mieša.

URL WebSocket zostáva skutočným cieľom služby. Jeho názov hostiteľa tiež poskytuje identitu TLS; nahradenie názvom hostiteľa proxy nenakonfiguruje zamýšľanú zabezpečenú službu.

Súvisiace články