Підключення Autobahn Twisted WSS через HTTP-проксі
Дозвольте connectWS узгоджувати кінцеву точку проксі та подальший TLS призначення замість відкриття прямої кінцевої точки поряд із фабрикою, що враховує проксі.
Кінцева точка 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; заміна його ім'ям хоста проксі не налаштовує потрібну захищену службу.