Javascript 在JS API内和为JS API建立WebSocket连接
Aim:为了提供一个简单易用的JS库,与服务器进行通信,我试图在API开始时建立WebSocket连接,然后定义库的功能 问题:问题在于,在加载库和运行用户脚本之前,我的套接字的readystate未转换为1(就绪)。对此进行调试已经证实了这一点,我不知道如何确保在继续使用用户脚本之前建立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() {
(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)并重新构造调用,以便连接准备好发送消息。是的,但最终我不会编写调用库的脚本。我想在幕后处理所有套接字业务,以便最终用户只需拨打他们想要的电话。