Socket.IO和AngularJS创建多个连接,如何停止?
作者:互联网
我正在使用服务器和客户端库中的AngularJS,Nodejs和Socket.io开发实时socket.io应用程序.我正在使用名为angular-socket-io的模块,但是当我告诉Angular进行连接时,我刷新页面越多,似乎Socket.IO保持了多个连接,并且我是该页面上的唯一用户.
在服务器日志中,我一直看到打印出许多套接字ID,并且当刷新应用程序页面时,需要一段时间才能重新连接.看着控制台,我发现它与服务器进行了大量通信(可能与多个套接字连接握手有关),但是在一两分钟之后,它终于稳定下来并再次开始接收数据.
我认为我做错了,还是正常?是否有人对在角度使用Socket.IO有什么好的建议,以便在刷新页面时重新连接一次并摆脱以前的所有连接,以便始终保持仅一个连接?
这是一些代码示例.只是为了澄清,btford.socket-io将所有转发的套接字事件都以“ socket:”作为前缀.因此,在我的示例中,它将是“ socket:start”.
myApp.js
angular.module('myApp', [ 'btford.socket-io', 'myControllers' ])
.config([ 'socketProvider', function(socketProvider) {
var appSocket = io.connect('http://live.myapp.com');
socketProvider.ioSocket(appSocket);
}])
.run(['socket', function(socket) {
socket.forward('error');
socket.forward('start'); // this is the event i'm trying to listen for
});
myController
angular.module('myControllers').controller('startController', [
'$scope',
function($scope) {
$scope.$on('socket:start', function(ev, data) {
$scope.activeDrivers.push({
name: data.user.firstName + " " + data.user.lastName
});
$scope.driversActiveTab.count = $scope.activeDrivers.length;
});
}
]);
就是这样,我不知道为什么它会与服务器保持如此多的连接!我在这里先向您的帮助表示感谢!
解决方法:
您应该在角度页面中生成一个id(例如:随机字符串).当您首先连接服务器时.将该id记录在服务器中,该id绑定了您的套接字.当客户端断开连接时,将调用服务器“断开连接”事件,监听此事件并清理套接字.
标签:angularjs,node-js,sockets,socket-io,javascript 来源: https://codeday.me/bug/20191122/2059073.html