JavaScript WebSocket使用新套接字替换引用
我正在尝试使用函数自动重新连接websocket。 我希望它保持相同的变量名,但我有一些问题。 这是我正在使用的函数JavaScript WebSocket使用新套接字替换引用,javascript,websocket,Javascript,Websocket,我正在尝试使用函数自动重新连接websocket。 我希望它保持相同的变量名,但我有一些问题。 这是我正在使用的函数 function reconnect(obj){ try{ obj=new WebSocket(obj.url); } except{ setTimeout(reconnect,5000,obj); } } mysocket=new Websocket(myurl); mysocket.close() r
function reconnect(obj){
try{
obj=new WebSocket(obj.url);
}
except{
setTimeout(reconnect,5000,obj);
}
}
mysocket=new Websocket(myurl);
mysocket.close()
reconnect(mysocket)
重新连接功能成功运行后,
mysocket
仍引用旧的已关闭Websocket
。我不知道如何将新的Websocket
对象转换为旧变量 您正在重写该变量。有多种方法可以做到这一点,最快的方法是传递一个对象
function reconnect(obj){
var mySocket = obj.mySocket;
try {
obj.mySocket=new WebSocket(mySocket.url);
}
except {
setTimeout(reconnect, 5000, obj);
}
}
mysocket=new Websocket(myurl);
mysocket.close()
var wrapperObject = {mysocket};
reconnect(wrapperObject);
// At any point of time `wrapperObject.mysocket` will have the latest socket instance
一种更简洁的方法是定义一个包装器类/函数
,它私有地限定mySocket
变量的范围。例:
function ReconnectSocket (mySocket) {
this.mySocket = mySocket
}
ReconnectSocket.prototype.reconnect = function () {
try {
this.mySocket = new WebSocket(this.mySocket.url);
}
except {
setTimeout(reconnect, 5000);
}
}
ReconnectSocket.prototype.getSocket = function () {
return this.mySocket
}
var mysocket=new Websocket(myurl);
mysocket.close()
var reconnectSocket = new ReconnectSocket(mysocket).reconnect()
// `reconnectSocket.getSocket()` will give the latest instance at any point of time
第一种方法是使用全局变量
function reconnect(){
try{
mysocket=new WebSocket(mysocket.url);
}
except{
setTimeout(reconnect,5000);
}
}
mysocket=new Websocket(myurl);
mysocket.close()
reconnect()
第二种方法,我认为应该将套接字包装在一个对象中
function reconnect(obj){
try{
obj.mysocket=new WebSocket(obj.mysocket.url);
}
except{
setTimeout(reconnect,5000,obj);
}
}
var socketObject = {};
socketObject.mysocket=new Websocket(myurl);
socketObject.mysocket.close()
reconnect(socketObject)
第二种方法将抛出一个错误,
socketObject
尚未初始化为对象。我考虑过您的第一个版本,但是如果它在第一次通过时失败,并使用setTimeout
将它分配给mysocket
?@jeffpkamp,我不确定您的评论,因为我没有您的测试环境。然而,我认为如果它在与Websocket本身相关的第一个旁路问题上失败,它也可能在setTimeout
上失败,但这与代码逻辑无关。这一切都与您的Websocket
初始化有关。你最好测试一下,看看哪个适合你