在我的服务器端,我使用以下工厂在我的控制器之间刷新/发出数据:
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);
});
});