繁体   English   中英

在JS API中并为JS API建立WebSocket连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM