【发布时间】: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