2012-05-27 11 views
5

यदि आपके पास नोड चल रहा है और मेरे पास नोड चल रहा है, है किसी ने भी एक समाधान देखा जो हमें फ़ाइलों को सिंक में सेट रखने की अनुमति देगा।node.js के साथ फ़ाइल सिंक: unision == tcp == नोड ----- [http] ----- node == tcp == unison

तुल्यकालन जटिल है, इसलिए मैंने सोचा कि unison जैसे किसी उपकरण (जो rsync की तरह है) करने के लिए छोड़ा जा सकता है और फिर सभी नोड प्रमाणीकृत उपयोगकर्ताओं के बीच एक टीसीपी पाइप कनेक्ट करना होगा।

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

यह शायद जावास्क्रिप्ट के बारे में 12 लाइनों है, लेकिन इस बिंदु पर यह मेरे से परे है, या उदाहरण के किसी भी मैं, मिल सकता है अब तक।

मैं अन्य फ़ाइल तुल्यकालन विकल्प (Git, सच्चाई, जीवाश्म की तरह, लिनक्स पर एक Simias iFolder सर्वर स्थापित करने का प्रयास करने के एक सप्ताह सहित की एक पूरी गुच्छा पर ध्यान दिया है, असफल ~ जो होनहार देखा है क्योंकि यह एक शामिल प्रत्येक प्रमुख ओएस के लिए फ़ाइलवॉचिंग क्लाइंट) लेकिन अब मैं सोच रहा हूं कि कुछ बहुत आसान, शायद जाना होगा।

किसी को भी एक Node.js परियोजना है कि इस तरह करता है, या एक स्तर पर है, जहां दो टीसीपी पाइप है जोड़ने देखा है तो बहुत कठिन, तो मैं तुम्हें

+0

आप Node.js शुद्ध पुस्तकालय पर एक नज़र लेने के लिए चाहते हो सकता है। इसमें ऐसे फ़ंक्शंस हैं जो आपको कस्टम टीसीपी सॉकेट कनेक्शन बनाने देते हैं। अगर आपको अधिक विशिष्टताओं की आवश्यकता है तो मुझे बताएं। http://nodejs.org/api/net.html#net_class_net_socket –

+0

अपने आरेख के संदर्भ में, क्या आपने दो node.js उदाहरणों के बीच एक साधारण टीसीपी सॉकेट कनेक्शन का उपयोग करने के बारे में सोचा है? उदाहरण के लिए, unision == tcp == node.js ------ [टीसीपी सॉकेट] ---- node.js == 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) 

}) 

फिर से

हो रही डेटा, आप रिवर्स नोड

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

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

से आने वाले
करना दूसरा टीसीपी

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 स्ट्रीम के साथ कार्य करने में आपकी सहायता करता है। विनील फाइलें गल्प द्वारा उपयोग की जाने वाली एक अमूर्तता हैं।

मुझे आशा है कि आप अपनी समस्या सौभाग्य हल करने के लिए कैसे धाराओं का उपयोग करने की एक विचार देता है

+0

नीचे की रेखा, मैं बिल्कुल एकजुटता का उपयोग नहीं करता। –

+0

लेकिन यह पूरी अद्यतन फ़ाइल को न केवल बदले गए हिस्से को सही भेजेगा (जैसा कि एकजुटता के आरएसआईएनसी होगा)? – swennemen

संबंधित मुद्दे