【问题标题】:Show realtime data to users with node.js and socket.io使用 node.js 和 socket.io 向用户显示实时数据
【发布时间】:2023-03-26 03:21:01
【问题描述】:

我希望将我们的 Web 应用程序从传统的 PHP/MySQL 优化/升级为更高效的技术。我一直在研究 node.js、socket.io 和 CouchDB,它们看起来很有希望,但我正在寻找建议和一些帮助来选择我们想要的最佳技术。

所以,概括一下当前所做的事情......

我们拥有捕获数据并将其发送到 FTP 服务器(通过 .txt 文件)的设备。 PHP 脚本每 5 分钟运行一次,扫描 FTP 以查找设备发送的 .txt 文件。文件的内容被插入 MySQL 数据库,.txt 文件被删除。另一个每 15 分钟运行一次的 PHP 脚本将从数据库中整理数据(例如,最后一小时的总和)并生成一个 XML 文档,由 Flash 表盘读取。

显然,这里有很多问题,而且远不是我们所追求的实时解决方案。我们想要的解决方案是,它可以通过某种方式检测 txt 文件何时上传到 FTP,然后只处理数据(而不是设置运行时间间隔)。数据仍然需要添加到数据库中,并在添加到数据库后立即被前端读取。 Flash 将被完全删除,因为它有点……恶心……

借助 node.js 和 Web Sockets (socket.io) 等激动人心的新技术,我相信我们可以大大改进这个过程!我知道 Ajax 能够做这样的事情,但听说与 Web Sockets 相比,它的开销相当高。我对数据库如何与 node.js 一起工作也有点模糊,更不用说我们所追求的最佳选择了......

谢谢!

【问题讨论】:

    标签: javascript node.js couchdb real-time socket.io


    【解决方案1】:

    Node 可以很好地与 NoSQL(尤其是基于 JSON 的 NoSQL)配合使用,但由于它们是用于处理节点中大多数异步数据库并返回 javascript 对象的模块,如果您更习惯使用 MySQL,我不会拒绝使用它。

    这是一个与数据库无关的大纲。

    var fs = require('fs');  //to watch the FTP
    var db = require('db');  //your choice of db
    var express = require('express'); //http server
    var io = require('socket.io'); //for realtime data push
    var app = express.createServer(); //create http server
    /*...usual express implementation...*/
    app.listen(80);
    var socket = io.listen(app); 
    db.connect( ..., start );
    function checkForFiles () {
      fs.readdir( FTPpath, sendFilesToDB );
    };
    function sendFilesToDB ( err, files ) {
      if( files.length === 0 ) {
        return checkForFiles();
      }
      db.insert( fileToQuery( files.pop() ), function () {
        sendFilesToDB( err, files );
      });
    }
    function fileToQuery ( file ) {
      ...
      return query;
    }
    function start () {
      checkForFiles();
      setTimeout( checkData, 1000 );
    }
    function checkData () {
      db.query( '....', function ( err, data ) {
        socket.broadcast( processData( data ) );
        setTimeout( checkData, 1000 );
      }
    }
    function processData (data) {
      ...
      return data;
    }
    

    【讨论】:

    • 听起来像是一个计划,我对 MySQL 非常满意,但我很乐意为 NoSQL 放弃它,如果它能够提高速度和效率...
    • 原谅我的无知,我是nodejs的新手......它似乎每1秒不断调用检查数据函数......这是个好主意吗?
    • 不是每一秒,它正在处理,等待一秒然后重复。
    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多