在express里如何让sockets的连接共用一个对象?
发布于 7 年前 作者 panyunyi 3322 次浏览 来自 问答
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的连接?

2 回复

把modbus那些代码放到一个单独的模块中就行了吧

@steambap client.connect在哪执行?能教一下吗

回到顶部