2012-05-27 15 views
5

ノードを実行していて、ノードを実行している場合、 には誰も私たちに のファイルを同期させておくことを可能にする解決策を見た。node.jsとのファイル同期:unision == tcp == node ----- [http] ----- node == tcp == unison

同期は複雑ですので、私は は(rsyncのようなものです)unisonのようなツールに任せることができることを を考え、その後、すべてのノードが認証されたユーザ間 TCPパイプを接続されてやる必要があります。

filesystem1---unision==tcp==node.js------[http]----node.js==tcp====unison---filesystem2 

それはおそらくJavaScriptの約12行だが、これまでのところ、 この時点で、それは私を超えている、または私は見つけることができる 例のいずれか。

私は、Linux上で Simias iFolderサーバをインストールしようとしているの週を含めGitは、信憑性、化石のような他のファイル同期オプション (の全体の束を見てきました、それが含まれているため、有望な を見た〜失敗各主要OSのファイルウォッチクライアント) しかし、今私は何か、はるかに単純な はおそらく行くだろうと思っています。誰もがこのような、 を行うか、2本のTCPパイプを接続すると、あまりにもハード ないレベルであるNode.jsのプロジェクトは、その後、私はあなた

+0

幸運あなたの問題を解決するためにそれはあなたのストリームを使用する方法のアイデアを与える願っています。カスタムTCPソケット接続を作成するための関数が含まれています。詳細が必要な場合はお知らせください。 http://nodejs.org/api/net.html#net_class_net_socket –

+0

ダイアグラムに関して、2つのnode.jsインスタンス間の単純なTCPソケット接続の使用について考えましたか?たとえば、unision == tcp == node.js ------ [TCPソケット] ---- node.js == tcp ==== unison。 TCPソケットは双方向であり、httpはそうではないので、何かが簡単かもしれないと私に伝えます。 –

答えて

0

から基本的なアプローチを考え聞いていただければ幸いです見ている場合

ストリーム2を使用することです。
私の基本的なアプローチは、このようなものになります。もう一方の端の

var net = require('net') 
, http = require('http') 
; 

var clientTcp = net.connect({port: 'toYourTcpServerPort'}) 

var server = http.createServer(function(req, res){ 
    clientTcp.pipe(res) 
}).listen('somePort') 

、あなたのノードで

var gulp = require('gulp') 
, thr = require('through2') 
; 


gulp.watch('rootDirectory/**/*', function(evt) { 


    if ('deleted' === evt.type) { 
    // do stuff if file is deleted 
    return 
    } 

    // file got changed, moved or added. 
    gulp.src(evt.path).pipe(thr(chunk, enc, next){ 
    // chunk is a vinyl filesytem object, 
    // so better fix chunk before sending to tcp server 
    next(null, fixedChunk) 

    }).pipe(toYourTcpServer) 

}) 

その後、最初のTCPから

なったデータは、あなたが逆から来るノード

var clientTcp2 = net.connect({port: 'toYourTcpServerPort2'}) 

var server2 = http.createServer(function(req, res){ 
    // fix response or something else. 
    req.pipe(clientTcp2) 
}).listen('somePort') 


を行います第2のtcp

gutil = require('gulp-util') 


clientTcp2.pipe(thr(function(chunk, enc, next){ 
    // You must create a vinyl filesystem before 
    // sending down stream. Use new gutil.File() 
    next(null, fixedChunk) 

})).pipe(gulp.dest('finalDirectoy')) 

through2は変換ストリームを作成し、gulpはストリームでタスクを作成するのに役立ちます。ビニールファイルはgulpによって使用される単なる抽象です。

私はあなたがNode.jsのネットライブラリを見てすることがあります

+0

ボトムライン、私は全くunisionを使用しません。 –

+0

しかし、これは更新されたファイル全体を、変更された部分だけでなく(unisonのrsyncのように)送信するでしょうか? – swennemen

関連する問題