其他分享
首页 > 其他分享> > Socket.IO和AngularJS创建多个连接,如何停止?

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