即使我使用了很多VMware术语,这也可以被视为一个JS问题。
我使用Websocket连接到由vSphere托管并由vCloud Director管理的VM。
通过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 ......
如何在此问题上进行更多调试?
答案 0 :(得分:3)
关闭代码1006意味着套接字刚被“删除”(TCP断开连接)而没有收到Web套接字协议关闭帧(https://tools.ietf.org/html/rfc6455第7.1.5节)
出现这种情况的原因有很多 - 可能是网络基础设施不稳定,甚至是网络套接字协议层部分的不稳定实现。
但是,由于您使用的是SSL连接,因此另一种可能性是对使用中的证书存在分歧。也许如果服务器端证书是自签名的,并且您没有在启动连接的浏览器中安装它(或者它使用某种内部CA并且无法识别CA)。不幸的是,大多数浏览器在使用Web套接字遇到不良证书时都没有提供太多信息 - 没有“你想要信任这个证书”的警告(与https不同)。
您还应该检查您的票证是否需要进行URL编码 - 该字符串中的'='字符可能需要用%3d(url编码)替换。虽然我老实说不记得服务器端的Web套接字处理程序是否需要。