如何从客户端断开连接并重新连接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();
});
});
你也可以只在客户端断开连接,而不是直接要求该服务器做它您。
我更新了我的问题,以便从服务器端获得更好的理解,但是这里的问题是,当我点击'stopLogs()'方法时,它甚至不会从客户端发出消息。 – hussain
@hussain - 那么,你的服务器代码仍然是错误的,需要更正。 'io.sockets.on(...)'是错误的,应该是'socket.on(...)'。我不知道角度,所以如果实际上存在问题,我会将其留给别人。 – jfriend00
'socket.on('end')'抛出异常套接字没有被定义,我用'io.on('end')'尝试了相同的结果。 – hussain