在 JavaScript 中使用 WebSocket 时出错
Posted
技术标签:
【中文标题】在 JavaScript 中使用 WebSocket 时出错【英文标题】:Error Using WebSocket in JavaScript 【发布时间】:2017-06-06 14:32:03 【问题描述】:我目前正在开发使用 Cordova 创建的移动应用程序。它使用套接字连接到我们的另一个设备与之通信。我们目前使用 chrome.sockets.tcp 这个plugin。
连接正常,但在 android 设备上断开连接时出现问题。这不是超时问题,因为断开连接可能会在 20 到 30 秒到 10 到 15 分钟之间发生。当我每秒下载 2 到 3 个请求的数据时,它甚至会断开连接。日志中没有错误,也没有任何内容表明发生了什么。 chrome.sockets.tcp 似乎没有太多的连接状态报告方式,所以我可以弄清楚它为什么会断开连接。
所以我尝试切换到 javascript 的 WebSocket,看看它是否有助于解决断开连接的问题。或者至少它似乎提供了更多的连接状态信息。但我无法连接。我得到Error during WebSocket handshake: net::ERR_INVALID_HTTP_RESPONSE
。这是我的代码:
var socket = new WebSocket("ws://" + IP + ":" + port);
socket.protocol = "soap";
socket.onclose = function(event)
console.log(event);
;
socket.onerror = function(event)
console.log(event);
;
socket.onmessage = function(event)
console.log(event);
;
socket.onopen = function(event)
console.log(event);
;
我做了一些研究,似乎我可能必须使用socket.protocol = "aProtocol";
设置协议,但是在我设置协议并设置断点之后,即使调用socket.protocol = "soap";
,socket.protocol 仍然是“”。使用构造函数设置协议也不行。
谁能告诉我为什么 chrome.sockets.tcp 在 Android 而不是 ios 上存在这种断开连接问题的一些原因,或者使用 JavaScript 的本机 WebSocket 无法连接的任何原因?非常感谢任何帮助。
【问题讨论】:
【参考方案1】:尝试在构造函数中传递子协议:
var socket = new WebSocket("ws://" + SSID + ":" + port, "soap");
【讨论】:
【参考方案2】:原来是因为我们的套接字服务器是 TCP 套接字服务器。 TCP 和 WebSockets 根本不能一起工作,因为建立连接的过程完全不同。所以我最终改用了一个 TCP 套接字 Cordova 插件。
【讨论】:
以上是关于在 JavaScript 中使用 WebSocket 时出错的主要内容,如果未能解决你的问题,请参考以下文章