var client = modbus.client.tcp.complete({
'host' : '192.168.1.8',
'port' : 10000,
'autoReconnect' : false,
'reconnectTimeout' : 1000,
'timeout' : 5000,
'unitId' : 1
});
//socket连接
io.sockets.on( "connection", function( socket ){
console.log( "socket.io" );
client.connect();
client.on('connect', function () {
console.log("modbus!");
setInterval(function(){
client.readInputRegisters(1,24).then(function(resp){
let arr=resp.payload;
let info=[];
for(let i=0;i<arr.length/4;i++){
let arr1=arr.slice(i*4,i*4+4);
let temp1=arr1[0];
let temp2=arr1[1];
arr1[0]=arr1[2];
arr1[1]=arr1[3];
arr1[2]=temp1;
arr1[3]=temp2;
info.push(arr1.readFloatBE());
}
socket.emit('info',info.join(","));
},console.error);
},1000);
});
});
这是一段通过modbus读取数据并通过websocket实时显示在页面上的服务端代码。 client.connect();这个方法写在sockets连接的外面这个modbus就不连接没有任何反应,写在里面是可以连接了,但是有个问题是每次刷新或者有一个新的页面访问sockets会开一个新的连接,此时这个client又会连一次,这东西连多了就会出错。 请问有没有什么方法可以让sockets新开的连接只用一次modbus的连接?