在我的服务器端,我使用以下工厂在控制器之间刷新/发出数据:
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;
有什么建议吗?
答案 0 :(得分:0)
由于某种原因,事实证明即使使用“socket.disconnect()”或“socket.destroy()”,客户端的连接也不会消失。
但使用“ONCE”解决了这个问题。
socket.**once**(eventName, function () {
var args = arguments;
rootScope.$apply(function () {
callback.apply(socket, args);
});
});