Показать данные в реальном времени пользователям с Node.js и Socket.io

StackOverflow https://stackoverflow.com/questions/5812704

Вопрос

Я хочу оптимизировать/обновить наше веб -приложение с традиционной 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top