2012-05-05 28 views
6

कुछ महीने पहले मैंने अबोज और डोनोड की खोज की और आखिरकार क्लाइंट/सर्वर बिडरेक्शनल संचार के लिए अबोज (और https://github.com/Flotype/nowclient) का उपयोग किया।सर्वर से क्लाइंट से संदेश को संदेश भेजें

अब क्लाइंट 2 नोड प्रक्रियाओं (नोड प्रक्रिया के बीच और बॉक्स के बाहर अबोज़ के लिए ब्राउज़र के बीच) के बीच अबोज संचार को सक्षम बनाता है। मैं क्लाइंट से सर्वर और सर्वर से क्लाइंट तक डेटा भेजने में सक्षम था। अब मैं नोड 0.6.12 का उपयोग करता हूं और यह क्लाइंट चलाने के लिए नोड 0.4.x का उपयोग करने के लिए दर्दनाक है।

मैं डोनोड पर नजदीक दिख रहा हूं और मुझे सच में यकीन नहीं है कि क्लाइंट संचार का सर्वर कैसे काम कर रहा है। क्या यह संभव है कि सर्वर क्लाइंट को सीधा संदेश भेजता है? विचार है कि क्लाइंट को सर्वर पर (पहले कनेक्शन पर) पंजीकरण करना है और सर्वर को क्लाइंट से संपर्क करने में सक्षम होने पर सक्षम होना चाहिए।

जो मैं समझता हूं उससे सर्वर पर एक विधि को कॉल करना संभव है यदि क्लाइंट ने पहले से सर्वर से कुछ अनुरोध किया है। क्या वो सही है ?

उत्तर

11

डोनोड एक सममित प्रोटोकॉल का उपयोग करता है ताकि दोनों तरफ उन कार्यों को परिभाषित कर सकें जो विरोधी पक्ष कॉल कर सकते हैं। आप ले सकते हैं 2 बुनियादी दृष्टिकोण हैं।

पहला तरीका सर्वर पक्ष पर एक रजिस्टर फ़ंक्शन को परिभाषित करना और क्लाइंट से कॉलबैक में पास करना है।

सर्वर:

var dnode = require('dnode'); 

dnode(function (remote, conn) { 
    this.register = function (cb) { 
     // now just call `cb` whenever you like! 
     // you can call cb() with whichever arguments you like, 
     // including other callbacks! 

     setTimeout(function() { 
      cb(55); 
     }, 1337); 
    }; 
}).listen(5000) 

ग्राहक:

var dnode = require('dnode'); 

dnode.connect('localhost', 5000, function (remote, conn) { 
    remote.register(function (x) { 
     console.log('the server called me back with x=' + x); 
    }); 
}); 

या बजाय आप सीधे एक सुडौल फैशन में सर्वर से ग्राहक कह सकते हैं एक बार विधि विनिमय पूरा हो गया है:

सर्वर:

var dnode = require('dnode'); 

dnode(function (remote, conn) { 
    conn.on('ready', function() { 
     remote.foo(55); 
    }); 
}).listen(5000); 

ग्राहक:

var dnode = require('dnode'); 
dnode(function (remote, conn) { 
    this.foo = function (n) { 
     console.log('the server called me back with n=' + n); 
    }; 
}).connect('localhost', 5000); 
+0

अपने स्पष्टीकरण के लिए धन्यवाद। क्या ग्राहक किसी सर्वर से कनेक्ट हो सकता है और सर्वर से आने वाली आने वाली कॉल का इंतजार कर सकता है? साथ ही, क्या कोई ग्राहक पहचानकर्ता है जो सर्वर का उपयोग कर सकता है? – Luc

+0

मैंने ग्राहकों का ट्रैक रखने के लिए conn.id और रिमोट का उपयोग किया। यह वास्तव में बहुत अच्छा काम कर रहा है। – Luc

+1

बस एहसास हुआ कि यह जवाब उसे सबक से अलग कर रहा है। <3 डेट लड़का - बहुत सारे भयानक मॉड्यूल! – MiniGod

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