2012-05-20 33 views
1

我使用節點js和王菲簡單地傳遞一些信息給客戶,如何創建訂閱,通過bayeux.getClient()發佈的消息視圖的路徑。發佈(

我創建節點服務器

var http = require('http'), 
    faye = require('faye'), 
    url = require('url'), 
    qs = require('querystring'); 
var POST; 
var bayeux = new faye.NodeAdapter({mount: '/faye', timeout: 45}); 

function publish(request,response) 
{ 
    var body = ''; 
    request.on('data', function (data) { 
     body += data; 
    }); 
    request.on('end', function() { 
     POST = qs.parse(body); 



     if(POST.secrete_key=="@#$werw*#@erwe*&^&*rw234234") // validate request using secret key 
     { 
      if(POST.root=="global"||POST.root=="web"){ 
       bayeux.getClient().publish(POST.channelWeb,{text: POST.textWeb}); 
      } 
      if(POST.root=="global"||POST.root=="mobile"){ 
       bayeux.getClient().publish(POST.channelMobile,{text: POST.textMobile}); 
      } 

      //eval(POST.auth_type+"_"+POST.update_type+"()"); 
     }//end validate request 
     else 
     { 
      response.writeHead(404); 
      response.end('404 File not found'); 
     } 
    }); 
    response.end(); 
} 



// Handle non-Bayeux requests 
var server = http.createServer(function (request,response) 
{ 
    var pathRegex = new RegExp('^/publish/?$'); 
    var pathname = url.parse(request.url).pathname; 
    if (pathRegex.test(pathname)) { 
     publish(request, response); 

    } else { 
     render404(request, response); 
    } 
}); 

bayeux.attach(server); 
server.listen(8000); 

我使用bayeux.getClient().publish(發佈消息到一個特定的客戶端。

我創建了一個訂閱JS

var client = new Faye.Client(n.node_url+':8000/faye/'); 
client.subscribe(n.channel, function(message) { 

    obj.processNotification(obj,message.text,n.user_id,n.user_type,n.channel); 
}); 

的問題是,IHAVE不知道如何在

bayeux.getClient().publish(channel, message); 

創建通道

以及如何訂閱,請幫忙。在此先感謝................

回答

0

您不創建頻道,沒有事先設置要做,只發布到頻道和任何聽衆該頻道將接收數據。

您已經訂閱了該頻道在你的代碼的代碼:

var client = new Faye.Client(n.node_url+':8000/faye/'); 
client.subscribe(n.channel, function(message) { 

    obj.processNotification(obj,message.text,n.user_id,n.user_type,n.channel); 
}); 
2

基本上在服務器端,您可以創建不同的信道建立邏輯並將其保存在你的數據庫爲您的客戶訂閱上它並使用相同的通信。

例如可能有兩個用戶A和B 的時間用戶A和B機載服務器,這時候你可以讓兩個通道的每個,根據他們的用戶ID和名稱和一些組合上動態號碼。這爲所有用戶提供默認渠道來收聽和訂閱。這些通道可用於將消息從服​​務器發送到客戶端,這可以充當客戶端的通知。

現在爲了通信目的,可以有一個通道,例如所有用戶都訂閱的OpenTalks,可以用於聊天。

您可以針對一對一對話更精確地製作頻道。

bayeux.getClient().subscribe('/'+channel_name, message); 
bayeux.getClient().publish('/'+channel_name, message); 

或者你可以使用

const faye = require('faye'); 
var client = new faye.Client('http://localhost:3000/faye',{timeout: 20}); 
client.connect(); 
client.subscribe('/'channel_name, function(message){console.log(message);}); 
client.publish ('/'+response1[0].channel_id, {channel_name: channel_name,message: message});