Socket IO AngularJS(1.x) 工厂注入多次发射
Posted
技术标签:
【中文标题】Socket IO AngularJS(1.x) 工厂注入多次发射【英文标题】:Socket IO AngularJS(1.x) Factory Injection Multiple Emits 【发布时间】: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;
有什么建议吗?
【问题讨论】:
【参考方案1】:由于某种原因,即使使用“socket.disconnect()”或“socket.destroy()”,客户端的连接也没有中断。
但是使用“ONCE”解决了这个问题。
socket.**once**(eventName, function ()
var args = arguments;
rootScope.$apply(function ()
callback.apply(socket, args);
);
);
【讨论】:
以上是关于Socket IO AngularJS(1.x) 工厂注入多次发射的主要内容,如果未能解决你的问题,请参考以下文章
改进这个 AngularJS 工厂以与 socket.io 一起使用