如何正确地通过angularjs服务连接到套接字

How correct recconect to socket via angularjs service?

本文关键字:服务 连接 套接字 angularjs 正确地      更新时间:2023-09-26

我写了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;

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

但是我不明白如何重新连接插座。我应该检查 每 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);

我建议你阅读这个库的代码,真的很有趣。