как создать путь представления для подписки на сообщение, опубликованное bayeux.getClient().publish(

я использую node js и faye, чтобы просто передать некоторые сообщения клиентам,

я создаю узел сервера

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);
});

проблема в том, что я понятия не имею, как создать канал

in

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

и как на это подписаться, помогите пожалуйста. заранее спасибо ................


person Kanishka Panamaldeniya    schedule 20.05.2012    source источник


Ответы (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});
person Rishikesh Chandra    schedule 25.05.2017

Вы не создаете канал, предварительная настройка не требуется, просто опубликуйте на канале, и все слушатели, находящиеся на этом канале, получат данные.

У вас уже есть код подписки на канал в вашем коде:

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);
});
person Pablo Fernandez heelhook    schedule 15.06.2012