gpt4 book ai didi

javascript - Socket.IO 和 AngularJS 创建多个连接,如何停止?

转载 作者:搜寻专家 更新时间:2023-10-31 23:48:55 25 4
gpt4 key购买 nike

我正在使用 AngularJS、Nodejs 和 Socket.io 作为服务器端和客户端库开发一个实时 socket.io 应用程序。我正在使用名为 angular-socket-io 的模块,但是当我告诉 Angular 进行连接时,我刷新页面的次数越多,似乎 Socket.IO 一直在维护多个连接,我现在是页面上的唯一用户.

在我的服务器日志中,我不断看到许多套接字 ID 被打印出来,当我刷新应用程序页面时,它需要一段时间才能重新连接。看着控制台,我看到它与服务器进行了很多通信(可能与多套接字连接握手有关)但一两分钟后,它终于稳定下来并再次开始接收数据。

我认为我做错了,或者这是正常的?有没有人对以 Angular 使用 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
});

我的 Controller

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;
});
}
]);

就是这样,我不明白为什么它一直与服务器建立如此多的连接!提前感谢您的帮助!

最佳答案

你应该在你的 Angular 页面中生成一个id(例如:随机字符串)。当你首先连接服务器时。在你的服务器中记录这个id,id是绑定(bind)你的套接字。当客户端断开连接时,将调用服务器'disconnect'事件,监听此事件并清理套接字。

关于javascript - Socket.IO 和 AngularJS 创建多个连接,如何停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com