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

问题描述:

我有从服务器发送到客户端的日志消息,并从服务器和日志记录到客户端一致,现在我有附加功能停止和播放日志给用户的一些控制,所以我想停止到断开socket.io连接并开始播放socket.io连接再次,首先我试图停止断开连接,但我不能发送消息到服务器,任何想法下面的代码或任何更好的解决方案,以实现这些任务有什么错? main.html中如何从客户端断开连接并重新连接socket.io?

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

这段代码是错误的:

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

你也可以只在客户端断开连接,而不是直接要求该服务器做它您。

+0

我更新了我的问题,以便从服务器端获得更好的理解,但是这里的问题是,当我点击'stopLogs()'方法时,它甚至不会从客户端发出消息。 – hussain

+0

@hussain - 那么,你的服务器代码仍然是错误的,需要更正。 'io.sockets.on(...)'是错误的,应该是'socket.on(...)'。我不知道角度,所以如果实际上存在问题,我会将其留给别人。 – jfriend00

+0

'socket.on('end')'抛出异常套接字没有被定义,我用'io.on('end')'尝试了相同的结果。 – hussain