Кінцева точка 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; заміна його ім'ям хоста проксі не налаштовує потрібну захищену службу.

Схожі статті