node.jsおよびsocket.ioを使用してユーザーにリアルタイムデータを表示します
-
25-10-2019 - |
質問
従来のPHP/MySQLから、より効率的なテクノロジーまで、Webアプリケーションを最適化/アップグレードしたいと考えています。私はnode.js、socket.io、couchdbを研究してきましたが、有望に見えますが、私たちが望むものに最適なテクノロジーを選択するのに推奨事項といくつかの助けを求めています。
したがって、現在行われていることの概要を説明するために...
データをキャプチャしてFTPサーバーに送信するデバイスがあります(.txtファイルを介して)。 PHPスクリプトは5分ごとに実行され、デバイスが送信する.txtファイルのFTPをスキャンします。ファイルの内容はMySQLデータベースに挿入され、.txtファイルが削除されます。 15分ごとに実行される別のPHPスクリプトは、データベースからのデータを照合し(たとえば、最後の1時間の合計値)、Flashダイヤルで読み取られるXMLドキュメントを作成します。
明らかに、ここには多くの問題があり、それはリアルタイムの解決策とはほど遠いものであり、それが私たちが目指していることです。私たちが望むソリューションは、どういうわけか、TXTファイルがFTPにアップロードされたときに検出され、データのみを処理することができるということです(実行される設定間隔を持つのではなく)。データは引き続きデータベースに追加され、データベースに追加されるとすぐにフロントエンドで読み取る必要があります。フラッシュは完全に削除されます。
Node.jsやWeb Sockets(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;
}