Ein Twisted-Endpunkt stellt die TCP-Verbindung her. Eine WebSocket-Factory, die für die Aushandlung eines Proxys konfiguriert ist, benötigt diesen Endpunkt dennoch, um sich mit dem Vermittler zu verbinden.

Für eine bestehende Autobahn-Anwendung mit ihrem Standardhelfer:

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 ist die vorhandene WebSocket-Protokollklasse der Anwendung. Halten Sie Reactor und Verbindungsabbau im Lebenszyklus dieser Anwendung. Für einen öffentlichen WSS-Dienst, der über einen öffentlichen Vermittler erlaubt ist, liefert die HTTP-Proxy-Liste Kandidaten für Proxy-Host und -Port der Factory.

Bei einer für einen Proxy konfigurierten Factory verbindet connectWS TCP mit dem Proxy und behält den TLS-Kontext des Ziels für die spätere sichere Verbindung. Es umschließt die gewöhnliche HTTP-Proxy-Verbindung zunächst nicht mit dem TLS des Ziels.

Eine eigene Anordnung aus HostnameEndpoint und ClientService muss dieselbe Aufteilung wahren: zuerst mit dem Proxy verbinden, dann die konfigurierte Factory das Ziel aushandeln und das erforderliche TLS aufbauen lassen. Den Endpunkt direkt mit events.example zu verbinden, während seine Factory ein Proxygespräch erwartet, vermischt diese Rollen.

Die WebSocket-URL bleibt das echte Dienstziel. Ihr Hostname liefert außerdem die TLS-Identität; ihn durch den Proxy-Hostnamen zu ersetzen konfiguriert nicht den beabsichtigten sicheren Dienst.

Ähnliche Artikel