Điểm cuối Twisted thực hiện kết nối TCP. Factory WebSocket được cấu hình để thương lượng proxy vẫn cần điểm cuối đó để kết nối với bên trung gian.

Đối với một ứng dụng Autobahn hiện có dùng trình trợ giúp chuẩn của nó:

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 là lớp giao thức WebSocket hiện có của ứng dụng. Giữ reactor và việc dọn dẹp kết nối trong vòng đời của ứng dụng đó. Với một dịch vụ WSS công khai được cho phép qua bên trung gian công khai, danh sách proxy HTTP cung cấp các ứng viên cho host và cổng proxy của factory.

Với factory được cấu hình proxy, connectWS kết nối TCP tới proxy và giữ ngữ cảnh TLS đích cho kết nối an toàn sau đó. Ban đầu nó không bọc kết nối proxy HTTP thông thường trong TLS đích.

Một bố trí HostnameEndpoint và ClientService tùy chỉnh phải giữ nguyên cách phân chia đó: trước hết kết nối tới proxy, sau đó để factory đã cấu hình thương lượng mục tiêu và thiết lập TLS cần thiết. Kết nối điểm cuối trực tiếp tới events.example trong khi factory của nó chờ một cuộc trao đổi qua proxy sẽ trộn lẫn các vai trò đó.

URL WebSocket vẫn là đích thực sự của dịch vụ. Tên máy chủ của nó cũng cung cấp danh tính TLS; thay nó bằng tên máy chủ proxy không cấu hình dịch vụ an toàn như mong muốn.

Bài viết liên quan