如何从客户端断开并重新连接 socket.io?

hus*_*ain 3 javascript node.js socket.io angularjs

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

<button type="button" class="btn btn-success" ng-click="stopLogs()">stop</button>
Run Code Online (Sandbox Code Playgroud)

Ctrl.js

$scope.stopLogs = function(){
        socket.emit('end');
    }
Run Code Online (Sandbox Code Playgroud)

angularSocketFactory.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);
                        }
                    });
                })
            }
        };

});
Run Code Online (Sandbox Code Playgroud)

服务器.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');
    });
});
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 8

这段代码是错误的:

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

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

您没有显示服务器代码的一般上下文,但可以这样做:

io.on('connection', function(socket) {
    socket.on('end', function() {
        socket.disconnect();
    });
});
Run Code Online (Sandbox Code Playgroud)

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