通过node.js和socket.io向用户显示实时数据
-
25-10-2019 - |
题
我希望优化/升级我们的Web应用程序从传统的PHP/MySQL,更高效的技术。我一直在研究Node.js,socket.io和Couchdb,它们看起来很有希望,但是正在寻找建议和一些帮助,以选择我们想要的最佳技术。
因此,要概述当前所做的工作...
我们有捕获数据并将其发送到FTP服务器(通过.txt文件)的设备。 PHP脚本每5分钟运行一次,将FTP扫描为设备发送的.TXT文件。文件的内容插入到mySQL数据库中,并删除.txt文件。每15分钟运行一次的另一个PHP脚本将从数据库中整理数据(例如,最后一个小时的总和值)并产生XML文档,该文档通过闪存拨号读取。
显然,这里有很多问题,这远非实时解决方案,这是我们的目标。我们想要的解决方案是,它可以以某种方式检测到TXT文件何时将其上传到FTP,而仅处理数据(而不是具有运行的设置间隔)。数据仍然需要添加到数据库中,并在将其添加到数据库后立即通过前端读取。闪光灯将被完全删除,因为它有点...
借助Node.js和Web插座(socket.io)等令人兴奋的新技术,我敢肯定我们可以大大改进此过程!我知道Ajax能够做类似的事情,但是听到与Web插座相比,它的开销相当高。我对数据库如何与node.js一起使用,更不用说我们追求的最佳选择了...
谢谢!
解决方案
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;
}
不隶属于 StackOverflow