【问题标题】:How to update constantly data from server in JS?如何在 JS 中不断更新来自服务器的数据?
【发布时间】:2017-10-03 12:21:49
【问题描述】:

有些数据在服务器上不断更新并写入文件(每 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);

【问题讨论】:

    标签: javascript html node.js


    【解决方案1】:

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

    是时候学习 Websocket 了。 websocket 是(某种意义上的)一个小连接(就像 http 一样),但它不会关闭(不像 http 在调用结束时关闭)。这样您就可以向所有连接到 websocket 的人广播数据,而且速度非常快。

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

    【讨论】:

    • 感谢您的回复。我找到了协议 WebSocket 以及 socket.io,那么在这种情况下你会推荐什么?
    • 我听说过,AFAIK 很好。你不需要有趣的东西,任何套接字都可以:)
    • @Martijn - OP 使用浏览器作为客户端。您不能使用浏览器中的任何套接字。您在浏览器中的选择是 Ajax (http) 连接或 webSocket 连接。
    【解决方案2】:

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

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

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

    有关 socket.io 在 webSockets 之上添加的功能列表,请参阅这篇文章:

    Socket.io features beyond plain webSocket

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多