使用node.js和socket.io向用户显示实时数据

我正在寻找优化/升级我们的Web应用程序从传统的PHP / MySQL,到更高效的技术。 我一直在研究node.js,socket.io和CouchDB,看起来很有前途,但是我正在寻求build议,并且在为我们想要的select最佳技术方面提供一些帮助。

所以,要概述目前的工作

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

很明显,这里有很多问题,远非实时解决scheme,这是我们的目标。 我们想要的解决scheme是,不知何故,它可以检测何时txtfile upload到FTP,然后只处理数据(而不是有一个设置的时间间隔运行)。 数据仍然需要添加到数据库中,一旦添加到数据库中,数据就会被前端读取。 闪光将被完全删除,因为它有点… ick …

有了像node.js和Web Sockets(socket.io)这样令人兴奋的新技术,我相信我们可以大大改善这个过程! 我知道Ajax能够做这样的事情,但是与Web套接字相比,它听起来有相当高的开销。 我也对数据库如何处理node.js有点朦胧,更不用说我们之后的最佳select了…

谢谢!

节点与NoSQL(特别是基于JSON的NoSQL)很好地协作,但是因为它们是处理节点中大多数数据库的模块,它们是asynchronous的并返回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; }