Punkt końcowy Twisted wykonuje połączenie TCP. Fabryka WebSocket skonfigurowana do negocjowania proxy nadal potrzebuje tego punktu końcowego, aby połączyć się z pośrednikiem.

Dla istniejącej aplikacji Autobahn korzystającej ze standardowego pomocnika:

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 to istniejąca klasa protokołu WebSocket aplikacji. Utrzymuj reaktor i czyszczenie połączenia w cyklu życia tej aplikacji. Dla publicznej usługi WSS dozwolonej przez publicznego pośrednika lista proxy HTTP dostarcza kandydatów na host i port proxy fabryki.

Dla fabryki skonfigurowanej z proxy connectWS łączy TCP z proxy i zachowuje kontekst TLS celu dla późniejszego bezpiecznego połączenia. Początkowo nie opakowuje zwykłego połączenia proxy HTTP w TLS celu.

Niestandardowy układ HostnameEndpoint i ClientService musi zachować ten sam podział: najpierw połączyć się z proxy, potem pozwolić skonfigurowanej fabryce wynegocjować cel i ustanowić wymagany TLS. Połączenie punktu końcowego bezpośrednio z events.example, gdy jego fabryka oczekuje rozmowy przez proxy, miesza te role.

Adres URL WebSocket pozostaje rzeczywistym celem usługi. Jego nazwa hosta dostarcza również tożsamość TLS; zastąpienie jej nazwą hosta proxy nie konfiguruje zamierzonej bezpiecznej usługi.

Powiązane artykuły