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

Javascript 在JS API内和为JS API建立WebSocket连接,javascript,sockets,websocket,Javascript,Sockets,Websocket,Aim:为了提供一个简单易用的JS库,与服务器进行通信,我试图在API开始时建立WebSocket连接,然后定义库的功能 问题:问题在于,在加载库和运行用户脚本之前,我的套接字的readystate未转换为1(就绪)。对此进行调试已经证实了这一点,我不知道如何确保在继续使用用户脚本之前建立WebSocket 我所拥有的: (function(myObject) { var socket = new WebSocket(url); socket.emit = function() {

Aim:为了提供一个简单易用的JS库,与服务器进行通信,我试图在API开始时建立WebSocket连接,然后定义库的功能

问题:问题在于,在加载库和运行用户脚本之前,我的套接字的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”:已处于连接状态。”

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


谢谢你的帮助

您可以在
套接字中缓冲所有消息。只要套接字未连接,就发出
,并在收到
onOpen
回调后发送它们

虽然这将解决您当前的问题,但您将看到新的问题将出现:
您可能希望处理与服务器的断开连接和重新连接,因此您可能需要扩展库API,以同时公开connectionstate change事件,并强制库用户仅在连接时发送消息。

您正在运行doSomething on document ready,但连接尚未就绪。您应该查看连接可用的事件(onOpen、onClose、onMessage、onError)并重新构造调用,以便连接准备好发送消息。是的,但最终我不会编写调用库的脚本。我想在幕后处理所有套接字业务,以便最终用户只需拨打他们想要的电话。