2016-04-21 43 views
1

我写的angularjs应用程序,并有一些问题。我的应用程序每次都使用套接字连接来获取一些数据。出于这个原因我写工厂(下面的代码)。如何通过angularjs服务正确地重新连接到套接字?

var Service = {}; 
var ws = new WebSocket("url"); 
var timer; 

Service.onMessage = function(message) { /* some code */}; 
Service.onClose = function() { 
    timer = $interval(function() { 
      ws = new WebSocket("url"); 
      Service.connect(); 
    }, 1000); 
}; 
Service.onOpen = function() { 
    console.log("open"); 
    if (timer) $interval.cancel(timer); 
}; 
Service.onError = function(error) { /* some code */}; 

Service.connect = function() { 
     // (Re)connect 

     // Reattaching handlers to object 
     ws.onmessage = Service.onMessage; 
     ws.onclose = Service.onClose; 
     ws.onopen = Service.onOpen; 
     ws.onerror = Service.onError; 
} 
return Service; 

我有什么问题?为了简单起见,想象一下我的服务器已关闭。套接字连接也关闭了。之后,onclose事件将开始。但我不明白如何重新连接套接字。例如,我应该每隔1或5秒检查一次连接。在我的代码中,如果套接字关闭,我创建新的套接字对象并尝试重新连接。我有什么?当服务器启动时,我有许多连接到套接字的对象。请帮帮我。我如何解决这个问题,例如,有一个对象(一个当前连接)?

回答

0

但我不明白如何重新连接套接字。我应该检查 连接每1秒或5秒

我觉得这不是一个纯粹的角度相关的问题,在这里一个普通的JavaScript答案(非测试):

function reconnect(url){ 
    ws = new WebSocket(url); 
    } 

    ws.onclose = function(){ 
    myTimeout = setTimeout(function(){reconnect('mywsURL')}, 5000); 
    }; 

在角使用:

var interval = $interval(your_callback, 5000); 

,并取消超时:

$interval.cancel(interval); 

我建议你阅读这个lib的代码,真的很有意思。

+0

感谢一个lib(工作正常:))!当然可能是我不写你的代码是正确的,而是一个对象,它也创建了许多对象。当套接字关闭时,重新连接函数创建新的套接字对象,在服务器关闭时无法连接。服务器启动后,我可以看到,哈哈,不是魔术,而是数十个对象,它们带着微笑连接到套接字。 但当然lib工作,我会阅读(教)源图书馆,谢谢! –

相关问题