Un punct final Twisted realizează conexiunea TCP. O fabrică WebSocket configurată să negocieze un proxy are totuși nevoie de acel punct final pentru a se conecta la intermediar.

Pentru o aplicație Autobahn existentă care își folosește helperul standard:

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 este clasa de protocol WebSocket existentă a aplicației. Păstrați reactorul și curățarea conexiunii în ciclul de viață al acelei aplicații. Pentru un serviciu WSS public permis printr-un intermediar public, lista de proxy-uri HTTP oferă candidați pentru gazda și portul proxy al fabricii.

Pentru o fabrică configurată cu proxy, connectWS conectează TCP la proxy și păstrează contextul TLS al destinației pentru conexiunea securizată ulterioară. Nu împachetează inițial conexiunea HTTP obișnuită a proxy-ului în TLS-ul destinației.

O configurare personalizată de HostnameEndpoint și ClientService trebuie să păstreze aceeași împărțire: mai întâi conectarea la proxy, apoi lăsarea fabricii configurate să negocieze ținta și să stabilească TLS-ul necesar. Conectarea punctului final direct la events.example în timp ce fabrica sa așteaptă o conversație prin proxy amestecă aceste roluri.

URL-ul WebSocket rămâne destinația reală a serviciului. Numele său de gazdă oferă și identitatea TLS; înlocuirea lui cu numele de gazdă al proxy-ului nu configurează serviciul securizat dorit.

Articole similare