Domanda

Sto cercando di ottimizzare / aggiornare la nostra applicazione web dal tradizionale PHP / MySQL, ad una tecnologia più efficiente. Ho fatto ricerche node.js, socket.io e CouchDB, che sembra promettente, ma sto cercando consigli e un aiuto nella scelta delle migliori tecnologie per ciò che vogliamo.

Quindi, per delineare il ciò che viene attualmente fatto ...

Abbiamo dispositivi che i dati di cattura e lo invia a un server FTP (tramite file .txt). Uno script PHP viene eseguito ogni 5 minuti, la scansione del FTP per i file txt che i dispositivi inviano. Il contenuto dei file vengono inseriti in un database MySQL, e il file .txt cancellati. Un altro script PHP che passa ogni 15 minuti sarà raccogliere dati dal database (ad esempio, i valori di somma per un ora) e produrre un documento XML, che vengono lette da quadranti Flash.

Ovviamente, ci sono un sacco di problemi qui, ed è lontano da una soluzione in tempo reale, che è quello che stiamo puntando. La soluzione che vorremmo è, che in qualche modo, è in grado di rilevare quando il file txt viene caricato sul FTP, e trattare solo i dati di allora (piuttosto che avere un intervallo di set che corre). Il dato sarebbe ancora bisogno di essere aggiunto al database, ed essere letto dal front-end non appena viene aggiunto al database. Flash sarebbe stato rimosso del tutto, perché è un po '... sigh ...

Con le nuove eccitanti tecnologie come node.js e Web Sockets (socket.io), io sono sicuro che potremmo migliorare questo processo notevolmente! Sono consapevole di Ajax essere in grado di fare qualcosa di simile, ma sentirlo ha piuttosto elevati costi generali rispetto al Web Sockets. Sono anche un po 'confuso con come un database avrebbe lavorato con node.js, per non parlare della migliore opzione per quello che stai dopo ...

Grazie!

È stato utile?

Soluzione

Il nodo funziona bene con NoSQL, (in particolare JSON basato NoSQL), ma dal momento che loro sono i moduli per la gestione dei database nel nodo maggior parte che sono asincrone e JavaScript restituire gli oggetti non vorrei respingere utilizza MySQL se siete più comodo utilizzarlo.

Ecco un contorno agnostico database.

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top