Socket.IO和AngularJS创建多个连接,如何停止
Socket.IO and AngularJS creates multiple connections, how to stop?
我正在使用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
});
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就是绑定您的套接字。当客户端断开连接时,将调用服务器"断开连接"事件,侦听此事件并清理套接字。
回答我自己的问题。根据此页面,如果您有跨服务器或多个核心运行的nodejs实例,则必须使用RedisStore来排队并正确处理套接字请求。我在问题中描述的奇怪行为是,浏览器试图连接到我的4个核心中的一个,而其他核心却没有响应。我按照说明启用Redis作为SocketIO的数据存储,所有的问题都消失了。
- jQuery UI自动完成突然停止工作
- 单击F5时如何停止页面加载
- JavaScript打印功能使日历停止工作
- 如何在未直接触发的情况下停止事件
- 播放当前视频时如何停止其他视频?JavaScript
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 停止jQuery UI滑块移动超过给定值
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Socket.IO和AngularJS创建多个连接,如何停止
- 我需要在停止后断开振荡器AudioNode的连接吗
- 如果没有连接,则停止url操作
- 为什么我的 KendoUI 图表在它甚至没有连接的 javascript 变量中更改日期格式?以及如何让它停止
- node.js串行端口事件在重新连接到端口后停止工作
- WebStorm调试javascript停止并断开连接的速度太快了
- Nodejs服务器在几个小时后停止接受连接
- 如何停止所有函数(多个异步等)从执行,如果用户中止连接到服务器(刷新时连接,关闭浏览器等)
- 信号R在停止连接后短暂锁定