נקודת קצה של Twisted מבצעת את חיבור ה-TCP. מפעל WebSocket שהוגדר לנהל משא ומתן על פרוקסי עדיין זקוק לנקודת הקצה הזו כדי להתחבר למתווך.

עבור יישום Autobahn קיים שמשתמש בעוזר הסטנדרטי שלו:

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 הוא מחלקת פרוטוקול ה-WebSocket הקיימת של היישום. שמרו את הריאקטור ואת ניקוי החיבור במחזור החיים של אותו יישום. עבור שירות WSS ציבורי המותר דרך מתווך ציבורי, רשימת פרוקסי ה-HTTP מספקת מועמדים עבור מארח הפרוקסי והפורט של המפעל.

עבור מפעל שהוגדר עם פרוקסי, connectWS מחבר TCP לפרוקסי ושומר את הקשר ה-TLS של היעד עבור החיבור המאובטח המאוחר יותר. הוא אינו עוטף תחילה את חיבור פרוקסי ה-HTTP הרגיל ב-TLS של היעד.

סידור מותאם של HostnameEndpoint ו-ClientService חייב לשמר את אותו פיצול: תחילה להתחבר לפרוקסי, ואז לתת למפעל המוגדר לנהל משא ומתן על היעד ולהקים את ה-TLS הנדרש. חיבור נקודת הקצה ישירות ל-events.example כשהמפעל שלה מצפה לשיחת פרוקסי מערבב את התפקידים האלה.

כתובת ה-WebSocket נשארת יעד השירות האמיתי. שם המארח שלה מספק גם את זהות ה-TLS; החלפתו בשם המארח של הפרוקסי אינה מגדירה את השירות המאובטח המיועד.

מאמרים קשורים