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

时间:2016-07-15 20:19:12

标签: javascript angularjs node.js socket.io

我有从服务器发送到客户端的日志消息,这些消息一直从服务器发送到客户端,现在我有额外的功能来停止和播放日志以向用户提供一些控件,所以我在考虑停止断开socket.io连接并再次开始播放socket.io连接,首先我尝试使用stop断开连接,但我无法向服务器发出消息,任何想法下面的代码有什么问题或任何更好的解决方案实现这些任务? main.html中

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

ctrl.js

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

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

});

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

1 个答案:

答案 0 :(得分:2)

此代码错误:

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

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