在JS API内部和为JS API建立WebSocket连接

时间:2014-02-18 22:57:27

标签: javascript sockets websocket

用于提供与服其后。

问题:问题是我的socket的readystate在加载库并运行用户脚本之前没有转换为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'上执行'send':已经处于CONNECTING状态。”

库成功加载但Websocket在运行客户端脚本之前未完成连接。在API完成加载之前,如何确保我的WebSocket已连接(readystate == 1)?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

只要套接字未连接,您可以做的是缓冲socket.emit中的所有消息,并在收到onOpen回调后发送它们。

虽然这可以解决您当前的问题,但您会看到会出现新的问题: 您可能希望处理与服务器断开连接并重新连接,因此您可能无论如何都需要扩展库API以暴露connectionstate更改事件并强制库用户仅在连接时发送消息。