【问题标题】:Socket IO AngularJS(1.x) Factory Injection Multiple EmitsSocket IO AngularJS(1.x) 工厂注入多次发射
【发布时间】:2018-07-11 19:17:31
【问题描述】:

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

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);
                    }
                });
            });
        }
    };
});

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

$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;

有什么建议吗?

【问题讨论】:

    标签: javascript angularjs websocket socket.io


    【解决方案1】:

    由于某种原因,即使使用“socket.disconnect()”或“socket.destroy()”,客户端的连接也没有中断。

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-08
      • 2019-09-20
      • 2019-07-05
      • 2016-09-16
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      相关资源
      最近更新 更多