在角度js中创建全局套接字对象?

时间:2016-11-08 11:37:37

标签: javascript angularjs websocket singleton

我是angular js的新手,我需要创建可以从任何控制器访问的socket对象的单个实例。

为此我创建了带有私有套接字变量的工厂,它在应用程序启动时自动连接到socket-io服务器。 我还创建了一个返回该套接字对象的公共方法。

我只想知道这种方法是否合适,或者我可以为此提供更好的解决方案。这是否意味着创建单例对象? 下面是我为此目的编写的工厂代码。 socketIOService.js

    (function() {
    'use strict';

    angular
        .module('app.core')
        /* @ngInject */
        .factory('ncSocketFactory', function(socketFactory, CALL_URL, $rootScope) {
            var socket  = io.connect(CALL_URL, {
                            transports: ["websocket"]
                        });


            socket.on('connect', function () {  
                console.log('socket io connected...');  
                $rootScope.$broadcast('socket:connected');
            });

            socket.on('incomingCall', function (data,evt) {  
                console.log('incomingCall data..'+data);
                $rootScope.incomingCallData = data;
                $rootScope.$broadcast('socket:incomingVideoCall');
            });



            socket.on('disconnect', function () {  
                console.log('socket io disconnected...');   
                $rootScope.$broadcast('socket:disconnected');
            });

            return {
                getSocketObject: function(){
                    return socket;
                },
                on: function (eventName, callback) {
                    socket.on(eventName, function () {                  
                  });
                },
                emit: function (eventName, data, callback) {
                    socket.emit(eventName, data, function () {
                  });
                },
                reconnect: function () {
                    socket  = io.connect(CALL_URL, {
                        transports: ["websocket"]
                    });
                },
                disconnect: function () {
                    console.log('in socket disconnect:'+socket.connected);
                    if(socket.connected){
                        socket.disconnect();

                        console.log('ncSocketFactory disconnected');
                    }
                }
              };
        });
})();

0 个答案:

没有答案