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

时间:2017-10-03 12:21:49

标签: javascript html node.js

有些数据在服务器上不断更新并写入文件(每100毫秒),我需要将其传输到客户端,暂时我通过setInterval函数执行此操作(应该检查它们)在同一间隔),检查这个JSON文件,我不知道这是否是问题的正确解决方案。

服务器端代码:

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);

2 个答案:

答案 0 :(得分:2)

您现在不再属于AJAX领域。一个正常的请求可能需要大约500毫秒来完成,这就慢了,除此之外,它消耗了很多资源。

学习Websockets的时间。 websocket是(sortof)一个小连接(就像http),但它没有关闭(不像http,它在调用结束时关闭)。通过这种方式,您可以向连接到websocket的所有人广播数据,而且速度非常快。

Node.js是一个允许您通过Socket.io进行设置的示例。您可以将您的情况视为一种单向聊天:)

答案 1 :(得分:0)

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

您将实现一个node.js服务器,该服务器侦听传入的socket.io连接,执行任何身份验证以确定谁在另一端侦听,然后您的服务器可以在有新数据时定期发送该客户端数据发送它。

您可以阅读有关socket.io here的信息。客户端和服务器都有库。客户端库使用webSocket传输(所有现代浏览器都支持),但socket.io在socket.io之上添加了许多非常有用的功能(例如连接监视,自动重新连接,自动序列化到JSON,等...)。

有关socket.io添加在webSockets之上的功能列表,请参阅此帖子:

Socket.io features beyond plain webSocket