Titik akhir Twisted melakukan koneksi TCP. Pabrik WebSocket yang dikonfigurasi untuk menegosiasikan proxy tetap memerlukan titik akhir tersebut untuk terhubung ke perantara.

Untuk aplikasi Autobahn yang sudah ada dan menggunakan pembantu standarnya:

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 adalah kelas protokol WebSocket yang sudah ada pada aplikasi. Pertahankan reaktor dan pembersihan koneksi dalam siklus hidup aplikasi tersebut. Untuk layanan WSS publik yang diizinkan melalui perantara publik, daftar proxy HTTP menyediakan kandidat untuk host dan porta proxy pabrik.

Untuk pabrik yang dikonfigurasi dengan proxy, connectWS menghubungkan TCP ke proxy dan mempertahankan konteks TLS tujuan untuk koneksi aman berikutnya. Awalnya ia tidak membungkus koneksi proxy HTTP biasa dalam TLS tujuan.

Penataan HostnameEndpoint dan ClientService khusus harus mempertahankan pembagian yang sama: hubungkan dulu ke proxy, lalu biarkan pabrik yang dikonfigurasi menegosiasikan target dan membangun TLS yang diperlukan. Menghubungkan titik akhir langsung ke events.example sementara pabriknya mengharapkan percakapan proxy mencampurkan peran tersebut.

URL WebSocket tetap menjadi tujuan layanan yang sebenarnya. Nama host-nya juga memasok identitas TLS; menggantinya dengan nama host proxy tidak mengonfigurasi layanan aman yang dimaksud.

Artikel terkait