Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从客户端断开和重新连接socket.io?_Javascript_Angularjs_Node.js_Socket.io - Fatal编程技术网

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

Javascript 如何从客户端断开和重新连接socket.io?,javascript,angularjs,node.js,socket.io,Javascript,Angularjs,Node.js,Socket.io,我有从服务器发送到客户端的日志消息,这些消息一致地从服务器发送到客户端,现在我有了停止和播放日志的附加功能,可以为用户提供一些控制,因此,我正在考虑停止以断开socket.io连接和重新开始播放socket.io连接,首先我尝试停止以断开连接,但我无法向服务器发送消息,是否知道下面的代码有什么问题,或者是否有更好的解决方案来完成这些任务? main.html <button type="button" class="btn btn-success" ng-click="stopLogs()

我有从服务器发送到客户端的日志消息,这些消息一致地从服务器发送到客户端,现在我有了停止和播放日志的附加功能,可以为用户提供一些控制,因此,我正在考虑停止以断开
socket.io
连接和重新开始播放
socket.io
连接,首先我尝试停止以断开连接,但我无法向服务器发送消息,是否知道下面的代码有什么问题,或者是否有更好的解决方案来完成这些任务? main.html

<button type="button" class="btn btn-success" ng-click="stopLogs()">stop</button>
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-嗯,您的服务器代码仍然错误,需要更正
io.sockets.on(…)
错误,应为
socket.on(…)
。我不知道,所以如果确实有问题,我会把它留给其他人。
socket.on('end')
正在引发异常,socket未定义,我尝试了
io.on('end')
相同的结果。@hussain-仔细查看我推荐的代码。您可能没有像我的答案中的代码那样向事件处理程序声明套接字参数。请参阅我的答案中的
函数(套接字)
。这是获取新连接的
套接字的方法,这是您应该操作的。我可以执行
socket.connect()
重新连接吗?
io.on('connection', function(socket) {
    socket.on('end', function() {
        socket.disconnect();
    });
});