[英]Establishing WebSocket Connection within and for a JS API
目的:为了提供一个与服务器通信的简单易用的JS库,我试图在API的开头建立一个WebSocket连接,并在此后定义该库的功能。
问题:问题是在加载库和运行用户脚本之前,我的套接字的ready状态没有转换为1(就绪)。 对此进行调试已经确认了这一点,我不确定在继续执行用户脚本之前如何确保WebSocket已建立。
我有的:
(function(myObject) {
var socket = new WebSocket(url);
socket.emit = function() {
//do some tasks and create a var "message"
socket.send(message);
}
window.myObject = myObject.prototype = {
doSomething: function() {
socket.emit();
}
}
}(myObject = window.myObject || {}));
上面,我在套接字对象上定义了一个自定义方法(socket.emit()),该方法又调用socket.send()。 我这样做是为了在通过socket.send()发送数据之前处理一些数据,重用了否则会重复的代码。
然后,我有了一些非常基本的html,其中包括此JS库,并且一个简单的脚本运行如下:
$(document).ready(function() {
myObject.doSomething();
});
我得到的错误是:“无法在'Websocket'上执行'发送':已经处于CONNECTING状态。”
库成功加载,但Websocket在运行客户端脚本之前未完成连接。 如何在API完成加载之前确保WebSocket已连接(readystate == 1)?
谢谢您的帮助!
只要套接字未连接,就可以将所有消息缓冲在socket.emit
,并在收到onOpen
回调后将其发送。
尽管这将解决您当前的问题,但您会看到新的问题:您可能希望处理与服务器的断开连接并重新连接,因此,您可能无论如何都需要扩展库API来公开连接状态更改事件并强制库用户执行以下操作:仅在连接时发送消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.