我正在使用 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);
});
问题是,我不知道如何创建频道
在
bayeux.getClient().publish(channel, message);
以及如何订阅它,请帮忙。 提前感谢...
在服务器端,您可以创建一个用于创建不同通道的逻辑,并将其保存在数据库中,以便客户端订阅并使用相同的逻辑进行通信。
例如,可能有两个用户,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});
您不创建通道,无需事先进行设置,只需发布到通道,该通道中的任何侦听器都将收到数据。
代码中已有订阅频道的代码:
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);
});