文件与node.js同步:unision == tcp == node ----- [http] ----- node == tcp == unison

时间:2012-05-27 01:25:28

标签: node.js tcp synchronization unison

如果您有节点正在运行并且我有节点正在运行, 有没有人见过能让我们做到的解决方案 保持一组文件同步。

同步很复杂,所以我想到了 可以留给像unison这样的工具(就像rsync一样) 然后所有节点都要做的就是连接一个 经过身份验证的用户之间的TCP管道。

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

可能大约有12行JavaScript,但是在 这一点超出了我,或任何一个例子 到目前为止,我找到了。

我查看了一大堆其他文件同步选项  (像Git,准确性,化石,包括一周试图安装一个 Linux上的Simias iFolder服务器,失败〜看起来很有希望 因为它包括每个主要操作系统的文件监视客户端) 但现在我想的是更简单的事情 可能会好起来。

如果有人看到过这样做的Node.js项目, 或者处于连接两个TCP管道的级别 不太难,那么我很感激你的回音

1 个答案:

答案 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使用的抽象。

我希望能让您了解如何使用流来解决问题 祝你好运