如何断开 socket.io 与客户端的连接并重新连接

How to disconnect and reconnect socket.io from client?

本文关键字:客户端 连接 重新连接 io socket 何断开 断开      更新时间:2023-09-26

我有从服务器到客户端发出的日志消息,并且始终从服务器和日志记录发送到客户端,现在我有额外的功能来停止和播放日志以向用户提供一些控制,所以我正在考虑停止断开连接socket.io并在播放时再次开始socket.io连接, 首先,我正在尝试停止断开连接,但我无法向服务器发出消息,知道下面的代码有什么问题或更好的解决方案来完成这些任务吗?主.html

<button type="button" class="btn btn-success" ng-click="stopLogs()">stop</button>

控制.js

$scope.stopLogs = function(){
        socket.emit('end');
    }

棱角分明的工厂.js

angular.module('App').factory('socket', function ($rootScope) {
    'use strict';
        var socket = io.connect('http://localhost:3000');
        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);
                        }
                    });
                })
            }
        };
});

服务器.js

var io = require('socket.io')(server);
  io.sockets.on('connection',function(){
   // Producer.startProducer();
    ditconsumer.start(function(value){
        io.emit('ditConsumer',value)
    });
    io.sockets.on('end', function() {
        socket.disconnect();
        console.log('it will disconnet connection');
    });
});

这段代码是错误的:

io.sockets.on('end',function () {
console.log('this will disconnet socket connection');
 io.sockets.disconnect();
});

您需要将该事件侦听器应用于一个特定套接字,然后需要断开一个特定套接字的连接。

您不显示服务器代码的一般上下文,但可以像这样完成:

io.on('connection', function(socket) {
    socket.on('end', function() {
        socket.disconnect();
    });
});

您也可以直接让客户端断开连接,而不是要求服务器为您执行此操作。