套接字 IO AngularJS(1.x) 工厂注入多个发射



在我的服务器端,我使用以下工厂在我的控制器之间刷新/发出数据:

angularApp.factory('socket', function ($rootScope) {
    var socket = io;
    return {
        on: function (eventName, callback) {
            socket.on(eventName, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    callback.apply(socket, args);
                });
            });
        },
        emit: function (eventName, data, callback) {
            socket.emit(eventName, data, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    if (callback) {
                        callback.apply(socket, args);
                    }
                });
            });
        }
    };
});

我从另一个控制器发出信号到这个(主控制器(开始数据传输到连接的客户端

$scope.$on('beginDataTransfer', function() {
   socket.emit('dataTransfer', "SOME DATA");
}

问题是如果我不检查"socket.connected == true",它将在客户端重新连接时多次发出数据。据我了解,当用户由于某种原因断开连接时,套接字不会被破坏。

我试图检查插座是否在出厂时重新连接,但它似乎不起作用:

on: function (eventName, callback) {
    if(socket.connected){
    socket.on(eventName, function () {
        var args = arguments;
        $rootScope.$apply(function () {
            callback.apply(socket, args);
        });
    });
}

},

它的发出次数是用户重新连接的次数的数倍。

如果套接字

断开连接,则删除套接字会导致 $scope.$on(({} 出现问题,即使这样,它仍然会多次发出。

delete socket;
socket = null;

有什么建议吗?

由于某种原因,事实证明,即使使用"socket.disconnect(("或"socket.destroy((",客户端的连接也没有消失。

但是使用"ONCE"解决了这个问题。

socket.**once**(eventName, function () {
   var args = arguments;
   rootScope.$apply(function () {
      callback.apply(socket, args);
   });
});

最新更新