Показать данные в реальном времени пользователям с Node.js и Socket.io
-
25-10-2019 - |
Вопрос
Я хочу оптимизировать/обновить наше веб -приложение с традиционной PHP/MySQL, до более эффективной технологии. Я исследовал node.js, socket.io и couchdb, которые выглядят многообещающими, но ищу рекомендации и некоторую помощь в выборе лучших технологий для того, что мы хотим.
Итак, чтобы наметить то, что в настоящее время сделано ...
У нас есть устройства, которые собирают данные и отправляют их на FTP -сервер (через файл .txt). Скрипт PHP работает каждые 5 минут, сканируя FTP для файлов .txt, которые отправляют устройства. Содержимое файлов вставлено в базу данных MySQL, а файл .txt удален. Другой скрипт PHP, который запускается каждые 15 минут, будет сопоставлять данные из базы данных (например, значения суммы за последний час) и создаст документ XML, который читается на флэш -цифрах.
Очевидно, что здесь есть много проблем, и это далеко от решения в реальном времени, к которому мы стремимся. Решение, которое мы хотели бы, заключается в том, что каким -то образом оно может обнаружить, когда файл TXT загружается на FTP, и только обрабатывать данные тогда (вместо того, чтобы иметь установленной интервал, который работает). Данные все еще должны быть добавлены в базу данных и прочитать передний тень, как только они будут добавлены в базу данных. Флэш будет удалена полностью, так как это немного ... ick ...
Благодаря новым захватывающим технологиям, таким как Node.js и веб -розетки (Socket.io), я уверен, что мы сможем значительно улучшить этот процесс! Я знаю, что Ajax может сделать что -то подобное, но слышал, что у него довольно высокие накладные расходы по сравнению с веб -разрывами. Я также немного смутно с тем, как база данных будет работать с Node.js, не говоря уже о лучшем варианте для того, что мы идем ...
Спасибо!
Решение
Узел хорошо работает с NOSQL (особенно NOSQL на основе JSON), но, поскольку они являются модулями для обработки большинства баз данных в узле, которые являются асинхронными и возвращающими объекты 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;
}