2

我希望将我们的 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 一起工作也有点模糊,更不用说我们所追求的最佳选择了......

谢谢!

4

1 回答 1

3

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;
}
于 2011-04-28T02:32:57.093 回答