2012-05-05 113 views
6

一對夫婦一個月前,我發現nowjs和dnode最後使用nowjs(和https://github.com/Flotype/nowclient)客戶端/服務器的雙向通信。從服務器發送信息到客戶端dnode

nowclient使2個節點進程之間nowjs通信(而不是之間的節點處理和用於nowjs瀏覽器開箱)。然後,我可以將數據從客戶端發送到服務器,並從服務器發送到客戶端。我現在使用節點0.6.12,使用節點0.4.x來運行客戶端是很痛苦的。

我給仔細看看dnode,我真的不知道如何服務器端到客戶端的通信工作。服務器是否可能向客戶端發送直接消息?這個想法是讓一個客戶端在服務器上註冊(在第一次連接時),並讓服務器在需要時聯繫客戶端。

據我所知,調用服務器上的方法是可能的,如果客戶已要求服務器在事放在第一位。那是對的嗎 ?

回答

11

dnode使用對稱協議,這樣任一側可以定義相對側可以調用的函數。您可以採取兩種基本方法。

第一種方式是定義在服務器端的寄存器功能和從客戶端的回調通過。

服務器:

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和remote來跟蹤客戶端。這工作真的很棒。 – Luc

+1

剛剛意識到這個答案來自於他自己。 <3 dat傢伙 - 這麼多真棒模塊! – MiniGod

相關問題