Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js 节点JS:socket.io-处理多个连接_Node.js - Fatal编程技术网

Node.js 节点JS:socket.io-处理多个连接

Node.js 节点JS:socket.io-处理多个连接,node.js,Node.js,我是在NodeJS中使用socket.io的新手,不过我编写了一个客户端(网页)/服务器程序来在客户端呈现一些统计数据。 要求类似于–呈现一个方框统计信息(从多个统计信息中选择)。由于用户可以打开多个浏览器窗口-我们有一个场景,其中一个框数据可以多次请求: 因此,我希望为同一个框的多个请求生成一个作业。以下是我为满足要求而实施的逻辑: 客户端: 建立与服务器的连接,创建数据通道: socket.on(boxname.toLowerCase(),函数(数据){ } 因此,每当我接收到一个boxn

我是在NodeJS中使用socket.io的新手,不过我编写了一个客户端(网页)/服务器程序来在客户端呈现一些统计数据。 要求类似于–呈现一个方框统计信息(从多个统计信息中选择)。由于用户可以打开多个浏览器窗口-我们有一个场景,其中一个框数据可以多次请求:

因此,我希望为同一个框的多个请求生成一个作业。以下是我为满足要求而实施的逻辑:

客户端:

  • 建立与服务器的连接,创建数据通道:

    socket.on(boxname.toLowerCase(),函数(数据){ }

  • 因此,每当我接收到一个boxname事件中有数据时,解析数据并呈现它

    服务器端

  • 首先调用一个expect脚本,将脚本复制到一个长方体上的无限循环中运行

  • 成功复制框中的脚本后-调用另一个expect脚本以开始执行:

    exports.ServiceMonitor=函数(boxName,res){

  • 第一步

    我需要复制一个脚本,因为请求多次出现,否则我将无法进入这个衍生过程的“退出”事件,在该事件中,我开始执行脚本,如下所述:

    var child = spawn('./scripts/copyscriptonbox.sh' , [boxName.toLowerCase(), getURL(boxName)]);
    
    在代码的后面部分,我一直在向声明为全局的boxnames变量添加框名。因此,在一个新的boxname请求中,我搜索boxnames变量中出现的boxname的次数。如果计数为1或更多,则对我来说,这意味着脚本已经在该框上运行:

            var noofbox = boxnames.split(boxName.toLowerCase()).length - 1;
    
            child.on('exit', function (code) {
                    logger.info('child stream exit: ' + code);
                    if(code == 0)
                    {
                            boxNames +=  boxName.toLowerCase();
                            logger.info('Box name added: ' + boxNames);
                            res.render('boxpage', {}); //render a web page
                            io.sockets.on('connection', function (socket) {
                logger.info('Connected to box :' + boxName);
                if(noofbox <= 0)            
                               schild = spawn('./scripts/boxmon.sh', [boxName.toLowerCase(), getURL(boxName)]);
                            schild.on('exit', function (code) {
                                    logger.info('schild stream exit.');
                             });
                            schild.stderr.on('data', function (data) {
                                    logger.info('stderr: ' + data);
                            });
                            schild.stdout.on('data', function (data) {
                                  //generate response
                            });
                            socket.on('disconnect',function(){logger.info('Disconnect Killed');ServiceMonitorEnd(boxName.toLowerCase());});
                            });
                    }
            });
    }
    
    var noofbox=boxName.split(boxName.toLowerCase()).length-1;
    子.on('exit',函数(代码){
    logger.info('子流出口:'+代码);
    如果(代码==0)
    {
    boxNames+=boxName.toLowerCase();
    logger.info('添加的框名称:'+框名称);
    res.render('boxpage',{});//呈现网页
    io.sockets.on('connection',函数(socket){
    logger.info('连接到框:'+boxName);
    
    如果(noofbox使用
    socket.once
    而不是
    socket.on
    ,则是另一个类似.on的EventEmitter,第一次只发出一次。请检查。但请记住,之后客户端将不会接收任何此类事件