如果您有节点正在运行并且我有节点正在运行, 有没有人见过能让我们做到的解决方案 保持一组文件同步。
同步很复杂,所以我想到了 可以留给像unison这样的工具(就像rsync一样) 然后所有节点都要做的就是连接一个 经过身份验证的用户之间的TCP管道。
filesystem1---unision==tcp==node.js------[http]----node.js==tcp====unison---filesystem2
可能大约有12行JavaScript,但是在 这一点超出了我,或任何一个例子 到目前为止,我找到了。
我查看了一大堆其他文件同步选项 (像Git,准确性,化石,包括一周试图安装一个 Linux上的Simias iFolder服务器,失败〜看起来很有希望 因为它包括每个主要操作系统的文件监视客户端) 但现在我想的是更简单的事情 可能会好起来。
如果有人看到过这样做的Node.js项目, 或者处于连接两个TCP管道的级别 不太难,那么我很感激你的回音
答案 0 :(得分:0)
我将针对此问题采取的基本方法是使用stream2 我的基本方法是这样的。
从第一个tcp获取数据
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)
})
然后在您的节点
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 clientTcp2 = net.connect({port: 'toYourTcpServerPort2'})
var server2 = http.createServer(function(req, res){
// fix response or something else.
req.pipe(clientTcp2)
}).listen('somePort')
来自第二个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使用的抽象。
我希望能让您了解如何使用流来解决问题 祝你好运