我是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');
}
}
};
});
})();