我正在使用wampv2并计划在我的项目中使用。 但是,有几件事我不知道如何处理。
我不知道如何发布订阅主题的客户群,而不是发布给所有订阅主题的客户。
一般问题:如何发布到特定客户?
我知道autobahn.js有一个API: session.publish('com.myapp.hello',['Hello,world!'],{},{qualified:[123,456]});
但是,如何获取符合条件的数组的客户端ID?
我做了以下事情:
启动crossbar.io路由器
使用autobahn.js
我正在尝试将此nodejs客户端作为发布者。
以下是示例代码:
var autobahn = require('autobahn'),
_ = require('underscore'),
md5 = require('md5');
var connection = new autobahn.Connection({
url: 'ws://127.0.0.1:8080/ws',
realm: 'realm1'
});
var shared_secret = 'cflyhao';
var userkeyToId = {};
connection.onopen = function(session, details){
var userAuth = function(args){
var clientid = args[0];
var userkey = args[1];
var signature = args[2];
if(isValidSignature(userkey, signature)){
if(!(_.has(userkeyToId, userkey))){
userkeyToId[userkey] = {};
}
userkeyToId[userkey][clientid] = clientid;
return true;
}else{
return false;
}
};
var userUnAuth = function(args){
var clientid = args[0];
var userkey = args[1];
var signature = args[2];
if(isValidSignature(userkey, signature)){
if(_.has(userkeyToId, userkey)){
delete userkeyToId[userkey][clientid];
}
}
};
session.register('user.auth', userAuth);
session.register('user.unauth', userUnAuth);
};
connection.open();
function isValidSignature(userkey, signature){
return signature == md5(userkey + shared_secret);
}
我试图将此浏览器客户端用作接收器。
以下是示例代码:
var usersessionid = null;
var userkey = "userkey1";
var shared_secret = "cflyhao";
var signature = md5(userkey + shared_secret);
var connection = new autobahn.Connection({
url: 'ws://127.0.0.1:8080/ws',
realm: 'realm1'
});
connection.onopen = function (session, details) {
usersessionid = session.id;
session.call('user.auth', [session.id, userkey, signature]).then(function(res){
console.log('res', res);
});
};
connection.onclose = function(reason, details){
//this is not work
//how to perform user.unauth, where to handle this
usersession.call('user.unauth', [usersessionid, userkey, signature]).then(function(res){
console.log('oncloseres', res);
});
};
connection.open();
您可以看到我想在nodejs客户端中存储userkeyToID映射。 只要我可以获取userkeyToID映射,我就可以发布到特定的客户端。(假设我没有尝试错误的方式)
浏览器客户端将调用'user.auth'来报告他的clientid。
user.auth工作正常。 Howerver,不知道如何处理user.unauth,user.unauth负责从地图中删除断开连接的客户端。
具体问题: 如何使user.unauth工作?
请帮助解决一般性问题和具体问题。
非常感谢提前!