Подключитесь к виртуальной машине с помощью Websocket
Это также можно рассматривать как вопрос JS, даже если я использую много терминов VMware.
Я использую Websocket для подключения к виртуальной машине, которая размещена в vSphere и управляется vCloud Director.
С помощью API vCloud Director у меня может быть билет безопасности, который похож на cst-xlIs3pP+C/oL/tEgwqvBHv6cBFnTT//VfLNh2kwOjOJItTwfEmVmePhjmJHfV0CisjxqaiQ9AJCNwvfu1zpr1dptvANS9NoIk4TCto7gRsM79R633SS2cIEuvXUAs7KzPoqdjYnSM8BcCttHLz8UbaPPYhjxx1MS2sCfUYovjqtGa9QwkZVBPxrfuPHsJNn3XchTO2h1pm/c/kim2kyu3R3worzcTSZsjGIk+QMWdvfEXc/PNYUGASA0EmP/16IMCltnODY9gQ9ddV0LfXeNKw==-IB8jmkQf1OtvVXZsqoO/cT0Ou93Dx7JlMOTGdQ==--tp-49:4A:E1:31:6B:95:39:AD:47:6D:63:F6:1E:72:F7:D1:B5:65:36:00--
,
Итак, URL Websocket очень похож на это "wss://10.160.122.169/902;cst-xlIs3pP+C/oL/tEgwqvBHv6cBFnTT//VfLNh2kwOjOJItTwfEmVmePhjmJHfV0CisjxqaiQ9AJCNwvfu1zpr1dptvANS9NoIk4TCto7gRsM79R633SS2cIEuvXUAs7KzPoqdjYnSM8BcCttHLz8UbaPPYhjxx1MS2sCfUYovjqtGa9QwkZVBPxrfuPHsJNn3XchTO2h1pm/c/kim2kyu3R3worzcTSZsjGIk+QMWdvfEXc/PNYUGASA0EmP/16IMCltnODY9gQ9ddV0LfXeNKw==-IB8jmkQf1OtvVXZsqoO/cT0Ou93Dx7JlMOTGdQ==--tp-49:4A:E1:31:6B:95:39:AD:47:6D:63:F6:1E:72:F7:D1:B5:65:36:00--"
в котором 902 - это порт, возвращаемый vCloud Director.
После того, как я создал этот Websocket, мой onopen
функция вызывается, значит ли это, что соединение установлено? Однако через одну или две секунды веб-розетка onclose
вызывается. Это говорит о том, что сервер закрывает соединение? Код события 1006...
Как я могу отладить больше по этой проблеме?
1 ответ
Код закрытия 1006 означает, что сокет был просто "отброшен" (отключение TCP) без получения кадра закрытия веб-протокола ( https://tools.ietf.org/html/rfc6455 раздел 7.1.5)
Это может быть вызвано множеством причин - это могут быть такие вещи, как неровная сетевая инфраструктура или даже нестабильные реализации частей уровней протоколов веб-сокетов.
Однако, поскольку вы используете соединение SSL, другой возможностью является разногласие по поводу используемых сертификатов. Возможно, если сертификат на стороне сервера самоподписан и вы не установили его в браузере, инициирующем соединение (или он использует какой-то внутренний CA, и этот CA не распознан). К сожалению, большинство браузеров не дают много информации, когда сталкиваются с плохими сертификатами с веб-сокетом - нет предупреждения "хотите ли вы доверять этому сертификату" (в отличие от https).
Вы также должны проверить, должен ли ваш билет быть зашифрован URL-адресом - возможно, что символы '=' в этой строке необходимо заменить на%3d (кодированный URL). Хотя я, честно говоря, не помню, требует ли этого обработчик веб-сокетов на стороне сервера.