我有一个聊天服务器。在客户订阅后,我想在数据库中查看他们订阅的聊天室是否有任何历史记录。
问题是,我只能在扩展中捕获"订阅"事件,而必须执行"return callback(message);"才能返回消息。如果我在这里做历史记录,就不会向客户端发布任何内容,因为客户端实际上并没有订阅。
有什么办法知道客户什么时候准备好了吗?或者成功订阅时发生的某些事件?
谢谢!
您可以在创建订阅后附加一个回调,当您成功订阅时会触发该回调,而当您订阅失败时会触发另一个回调:
var http = require('http');
var faye = require('faye');
var faye_server = new faye.NodeAdapter({mount: '/faye', timeout: 120});
faye_server.listen(8089);
var subscription = faye_server.getClient().subscribe('/testing', function(message){console.log(message);});
subscription.callback(function(){console.log('Subscription successful and ready to use!');});
subscription.errback(function(){console.log('ERROR: Subscription failed!');});
这在faye主页上有记录,尽管它有点被掩盖了。http://faye.jcoglan.com/browser/subscribing.html
正如我测试过的,这可以在节点服务器、节点客户端或浏览器客户端上工作
此外,我一直在做的是确保我的客户端启动并运行:创建客户端,然后尝试订阅垃圾通道名称。一旦订阅成功、失败或超时(大约5秒),我就认为这是我的客户开放式成功。这是一个有点迂回的方法,但它对我来说运行得很好,faye通过使用回调和errback使它变得非常干净,就像我前面的例子一样。
现在,这一切都在客户端,但在服务器端要容易得多:http://faye.jcoglan.com/node/monitoring.html.只需使用此处的扩展并查找来自特定客户端的订阅事件,就可以开始了。
希望能帮助