Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 在NodeJS Web服务器上服务多个连接_Node.js_Express_Socket.io - Fatal编程技术网

Node.js 在NodeJS Web服务器上服务多个连接

Node.js 在NodeJS Web服务器上服务多个连接,node.js,express,socket.io,Node.js,Express,Socket.io,我有一个使用Node.js和express和socket.io运行的web服务器,它显示实时温度信息,并允许实时控制一些基本硬件控制器 每次我从不同的客户机连接到服务器时,都会交付内容的新实例,而不是交付上次配置的实例或状态 当只使用一个客户端时,一切正常,但我需要能够从多个客户端监控温度和控制状态 如何确保无论哪个客户端访问服务器,它们都能看到相同的服务器状态 服务器代码如下: var app = require('express')(); var http = require('http')

我有一个使用Node.js和express和socket.io运行的web服务器,它显示实时温度信息,并允许实时控制一些基本硬件控制器

每次我从不同的客户机连接到服务器时,都会交付内容的新实例,而不是交付上次配置的实例或状态

当只使用一个客户端时,一切正常,但我需要能够从多个客户端监控温度和控制状态

如何确保无论哪个客户端访问服务器,它们都能看到相同的服务器状态

服务器代码如下:

var app = require('express')();
var http = require('http').createServer(app);
var socketServer = require('socket.io').listen(http);
var fs = require('fs');
var csv_stream = fs.createWriteStream("tempLog.csv");
var time_handler = require('moment');

SerialPort = require("serialport").SerialPort;

var serialPort;
var portName = '/dev/ttyACM0'; //change this to your Arduino port
var sendData = "";
var debug = false; 

app.get('/', function(req, res){
    res.sendFile(__dirname + '/public/interface.html')
});

socketServer.on('connection', function(socket){
  console.log('a user connected');
    socket.on('run', function(data){
      serialPort.write('Z' + data + 'A');
      console.log('write to ard');
      console.log('Z' + data + 'A');
    });
    socket.on('stop', function(data){
      serialPort.write('Y' + data + 'B');
      console.log('write to ard');
      console.log('Y' + data + 'B');
    });
    socket.on('configure', function(data){
      serialPort.write('X' + data + 'C');
      console.log('write to ard');
      console.log('X' + data + 'C');
    });
    socket.on('temperatureValues', function(data){
        serialPort.write(data);
        console.log('write data to ard');
        console.log(data);      
    });
    socket.on('timeValues', function(data){
        serialPort.write(data);
        console.log('write data to ard');
        console.log(data);      
    });
});

serialListener(debug);

function SocketIO_serialemit(sendData){      
    //console.log(sendData.length);     

    if(sendData.length >= 14)
    {   
        var s_data = sendData.split(",");
        socketServer.emit('temp1',{'temp': s_data[0]});
        socketServer.emit('temp2',{'temp': s_data[1]});
        socketServer.emit('temp3',{'temp': s_data[2]});
        csv_stream.write(time_handler().format('HH:mm:ss') + ',');
        csv_stream.write(s_data[0] + ',' + s_data[1] + ',' + s_data[2]);
        csv_stream.write('\n');
        //csv_stream.end(); 
    }

    else{
        console.log("Error");
        //var s_data = sendData.split(",");
        //console.log(s_data[0]);
        //console.log(s_data[1]);
        //console.log(s_data[2]);   
    }
}

// Listen to serial port
function serialListener(debug)
{
    var receivedData = "";
    serialPort = new SerialPort(portName, {
        baudrate: 9600,
        // defaults for Arduino serial communication
         dataBits: 8,
         parity: 'none',
         stopBits: 1,
         flowControl: false
    });

    serialPort.on("open", function () {
      console.log('open serial communication');
            // Listens to incoming data
            serialPort.on('data', function(data) {

            if (data.toString() == "X")
            {
                console.log("Control Done");
                socketServer.emit('Completed',{'key': data.toString()});
            }

            if (data.toString()[0] == "S")
            {
                console.log("Stage Done");
                socketServer.emit('Stage',{'key': data.toString()[0]});
            }

            receivedData += data.toString();

              //console.log(receivedData);
              if (receivedData .indexOf('E') >= 0 && receivedData .indexOf('T') >= 0) {
               sendData = receivedData .substring(receivedData .indexOf('T') + 1, receivedData .indexOf('E'));        
            receivedData = '';
            SocketIO_serialemit(sendData);
             }


        });  
    });
}

http.listen(3000, function(){
    console.log('listening on *:3000')  
});

app.use(require('express').static(__dirname + '/public')); //sever static files (css, js, fonts, etc.)

你能和我们分享你的服务器代码吗?我添加了服务器代码,谢谢。