Javascript 如何在页面更改时断开socket.io

Javascript 如何在页面更改时断开socket.io,javascript,socket.io,Javascript,Socket.io,当我在我的网站上更改页面时,我想断开插座,以便只读取我针对的特定传感器的读数,我所有插座的代码看起来大致相同,这里是温度传感器(ds18b20)的代码 例如: 当我从温度页面切换到湿度页面时,我希望tempsocket关闭/断开,湿度插座打开,反之亦然。(每个传感器都有自己的javascript) 编辑:解决方案,我没有关闭给我带来问题的套接字,而是开始调用if语句中的所有内容,现在图表工作得更好了,我没有发现任何奇怪的事情 if(elmarr.indexOf('Temperature') &g

当我在我的网站上更改页面时,我想断开插座,以便只读取我针对的特定传感器的读数,我所有插座的代码看起来大致相同,这里是温度传感器(ds18b20)的代码

例如: 当我从温度页面切换到湿度页面时,我希望tempsocket关闭/断开,湿度插座打开,反之亦然。(每个传感器都有自己的javascript)

编辑:解决方案,我没有关闭给我带来问题的套接字,而是开始调用if语句中的所有内容,现在图表工作得更好了,我没有发现任何奇怪的事情

if(elmarr.indexOf('Temperature') >= 0){

  if( elmarr.indexOf('Temp1') >= 0){//Temperature1 queue
    var value = (parseFloat(msg.payload)); //convert the string to float
    values.push(value); //Pass the temperature reading into the array
  };

  if( elmarr.indexOf('Temp2') >= 0){//Temperature2 queue
    var value2 = (parseFloat(msg.payload)); //convert the string to float
    values2.push(value2); //Pass the temperature reading into the array
    var d = new Date();//Get Date/Time for the times array
    var n = d.getHours()+ ":" + d.getMinutes()+ ":" + d.getSeconds();
    times.push(n);
    if(times.length > values.length || times.length > values2.length){
        EmptyArrays(values, values2, times);
    }else{
        createGraph(values, values2, times);
    };
  };

  if(values.length > 6)//Delete the first value in the Temperature Array
  {
    values.splice(0, 1);
  }

  if(values2.length > 6)//Delete the first value in the Temperature Array
  {
    values2.splice(0, 1);
  }

  if(times.length > 6)//Delete the first value in the Time Array
  {
    times.splice(0, 1);
  }
};

每当网页在浏览器中更改时,该网页中的任何WebSocket或socket.io连接都会被浏览器自动关闭。事实上,你甚至无法阻止它们关闭

因此,您需要做的就是确保下一个网页为下一个页面打开正确的套接字。上一个已经关闭。从您的代码中根本不清楚“打开湿度插座”是什么意思


有多种方法可以打开套接字并向服务器指示要发送的数据类型。您可以向它发送一条消息,指示您希望它向您发送的数据类型。您可以请求连接到服务器将知道的特定命名空间(在socket.io中)。您可以要求加入一个特定的房间,该房间将接收特定类型的广播。这取决于您想要如何配置和设计客户端和服务器。没有预设的方法可以做到这一点。

每当浏览器中的页面发生更改时,该页面中的任何WebSocket或socket.io连接都会被浏览器自动关闭。事实上,你甚至无法阻止它们关闭

因此,您需要做的就是确保下一个网页为下一个页面打开正确的套接字。上一个已经关闭。从您的代码中根本不清楚“打开湿度插座”是什么意思


有多种方法可以打开套接字并向服务器指示要发送的数据类型。您可以向它发送一条消息,指示您希望它向您发送的数据类型。您可以请求连接到服务器将知道的特定命名空间(在socket.io中)。您可以要求加入一个特定的房间,该房间将接收特定类型的广播。这取决于您想要如何配置和设计客户端和服务器。没有预设的方法可以做到这一点。

谢谢你的解释,我想我已经大致知道现在该做什么了。谢谢你的解释,我想我已经大致知道现在该做什么了。
if(elmarr.indexOf('Temperature') >= 0){

  if( elmarr.indexOf('Temp1') >= 0){//Temperature1 queue
    var value = (parseFloat(msg.payload)); //convert the string to float
    values.push(value); //Pass the temperature reading into the array
  };

  if( elmarr.indexOf('Temp2') >= 0){//Temperature2 queue
    var value2 = (parseFloat(msg.payload)); //convert the string to float
    values2.push(value2); //Pass the temperature reading into the array
    var d = new Date();//Get Date/Time for the times array
    var n = d.getHours()+ ":" + d.getMinutes()+ ":" + d.getSeconds();
    times.push(n);
    if(times.length > values.length || times.length > values2.length){
        EmptyArrays(values, values2, times);
    }else{
        createGraph(values, values2, times);
    };
  };

  if(values.length > 6)//Delete the first value in the Temperature Array
  {
    values.splice(0, 1);
  }

  if(values2.length > 6)//Delete the first value in the Temperature Array
  {
    values2.splice(0, 1);
  }

  if(times.length > 6)//Delete the first value in the Time Array
  {
    times.splice(0, 1);
  }
};