2012-05-20 7 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 находятся на вашем сервере, в это время вы можете сделать по два канала для каждого из них, исходя из комбинации их идентификаторов и имени пользователя и некоторых динамическое число. Это дает всем пользователям каналы по умолчанию для прослушивания и подписки. Эти каналы могут использоваться для отправки сообщений от сервера клиентам, которые могут выступать в качестве уведомлений для клиента.

Теперь для связи может быть канал, такой как 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});