如何不断更新从JS服务器的数据?

有数据不断更新在服务器上,并写入文件(每100毫秒),我需要将其转移到客户端,目前我通过setInterval函数(这应该检查它们在相同的间隔),检查这个JSON文件,我不知道这是否是一个正确的解决scheme的问题。

服务器端代码:

function SerialPortStart(COM, Input){ console.log( COM, Input); var serialPort = new SerialPort(COM, { parser: SerialPort.parsers.readline('\n'), baudrate: +Input || 9600 }); serialPort.on('data', function (data) { thermodata = data.toString(); console.log(data); fs.writeFileSync(__dirname +'/views/cockpit.json',JSON.stringify(thermodata)); }); 

};

客户端代码:

 function SerialPortStart(){ var xhr = new XMLHttpRequest(); setInterval(function() { xhr.open('GET', 'cockpit.json', true); xhr.send(); xhr.onreadystatechange = function() { if(this.status == 200) { var data = JSON.parse(xhr.responseText); console.log(data); obj = data.split(';'); if(cockpitNum[3] != null){ $('header .mainBlock1 .cockpit .elements .blockHaw .cirle').css({ transform: 'rotate('+(obj[cockpitNum[3]]) +'deg)' }); } }, 50); 

你现在已经不在AJAX的领域了。 一个正常的请求可能需要大约500毫秒才能完成,这是慢的,除此之外,消耗的方式很多的资源。

学习Websockets的时间。 一个websocket是一个小的连接(就像http一样),但它不closures(不像在调用结束时closures的http)。 这样你就可以向所有连接到websocket的数据广播,而且速度非常快。

Node.js是一个允许你通过Socket.io设置的例子 。 你可以把你的情况想象成一种单向的聊天:)

我build议你使用socket.io库,并从你的网页打开一个socket.io连接到你的服务器。 这是客户端和服务器之间的连续连接,允许以非常低的开销将数据从客户端发送到服务器或服务器到客户端。 它是客户端和服务器之间进行大量事务处理的理想select,在服务器要定期向客户端发送数据时是理想的select。 它比客户端的Ajax轮询更有效率。

你可以实现一个node.js服务器来监听传入的socket.io连接,不pipe需要什么身份validation来确定谁在监听另一端,然后你的服务器可以在有新数据发送时定期发送那个客户端数据。

你可以在这里阅读关于socket.io。 那里有用于客户端和服务器的库。 客户端库使用webSocket传输(所有现代浏览器均支持),但socket.io在socket.io之上添加了许多非常有用的function(如连接监视,自动重新连接,自动序列化为JSON,等等…)。

看到这个职位列表的functionsocket.io添加在webSockets的顶部:

Socket.iofunction超越普通的webSocket