Канцавы пункт 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, калі яго фабрыка чакае размову праз праксі, змешвае гэтыя ролі.

URL WebSocket застаецца сапраўдным прызначэннем службы. Яго імя хаста таксама дае ідэнтычнасць TLS; замена яго імем хаста праксі не наладжвае патрэбную бяспечную службу.

Падобныя артыкулы