使用 Websocket 连接到虚拟机

Connect to VM using Websocket

即使我使用了很多 VMware 术语,这也可以被视为 JS 问题。

我正在使用 Websocket 连接到由 vSphere 托管并由 vCloud Director 管理的虚拟机。

通过 vCloud Director API,我可以获得安全票,类似于 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--

因此,Websocket url 非常像这样 "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函数被调用,这是否意味着连接已经建立?然而,一两秒后,websocket onclose 被调用。这是说服务器正在关闭连接吗?事件代码是 1006...

如何调试更多关于这个问题的信息?

关闭代码 1006 表示套接字只是 'dropped'(TCP 断开连接)而没有收到 Web 套接字协议关闭帧(https://www.rfc-editor.org/rfc/rfc6455 第 7.1.5 节)

发生这种情况的原因有很多 - 可能是不稳定的网络基础设施,甚至是部分网络套接字协议层的不稳定实现。

但是,由于您使用的是 SSL 连接,另一种可能性是对所使用的证书存在分歧。也许如果服务器端证书是自签名的并且您没有将它安装在启动连接的浏览器中(或者它使用某种内部 CA 并且无法识别该 CA)。不幸的是,大多数浏览器在遇到带有网络套接字的不良证书时不会提供太多信息 - 没有 'do you want to trust this cert' 警报(与 https 不同)。

您还应该检查您的机票是否需要 URL 编码 - 可能该字符串中的 '=' 字符需要替换为 %3d (url编码)。虽然老实说我不记得服务器端网络套接字处理程序是否需要它。