Крайната точка на Twisted осъществява TCP връзката. Фабрика за WebSocket, настроена да договаря прокси, все още се нуждае от тази крайна точка, за да се свърже с посредника.

За съществуващо приложение Autobahn, което използва стандартния си помощник:

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 е съществуващият клас на WebSocket протокола на приложението. Пазете реактора и почистването на връзката в жизнения цикъл на това приложение. За публична WSS услуга, разрешена през публичен посредник, списъкът с HTTP проксита предоставя кандидати за хоста и порта на проксито във фабриката.

При фабрика, настроена за прокси, connectWS свързва TCP към проксито и запазва TLS контекста на дестинацията за по-късната защитена връзка. Той не обвива първоначално обикновената HTTP прокси връзка в TLS на дестинацията.

Персонализирана комбинация от HostnameEndpoint и ClientService трябва да запази същото разделение: първо свързване с проксито, после настроената фабрика да договори целта и да установи необходимия TLS. Свързването на крайната точка директно към events.example, докато фабриката очаква разговор през прокси, смесва тези роли.

URL адресът на WebSocket остава истинската дестинация на услугата. Неговото име на хост също дава TLS идентичността; заместването му с името на прокси хоста не настройва желаната защитена услуга.

Подобни статии