我正在使用Pusher来广播我的Laravel事件,但我面临着一个疑问:
如果我有一个频道,让我们把它命名为global_updates
,我想用它来发送全局更新,比如新闻或网站状态,所以我只做:
var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
channel.bind('global_event', function(data) {
// stuff
});
所以,在这里之前一切都很好,但如果我想为同一个频道消耗几个事件呢?我该怎么办?我应该这样做吗:
var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
channel.bind('global_event', function(data) {
// stuff
});
channel.bind('global_event2', function(data) {
// stuff for other event
});
channel.bind('global_event3', function(data) {
// stuff for the 3rd event
});
这是个好办法吗?现在,如果我想在发送全局事件的同时发送仔细阅读者消息,假设每个用户有一个名为user_(user_id)
的通道,但我仍然想使用全局事件。我应该同时订阅这两个吗?
var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
var UserChannel = pusher.subscribe('user_(user_id)');
channel.bind('global_event', function(data) {
// stuff
});
UserChannel.bind('per_user_event', function(data) {
// stuff
});
问题是,我可以有大约100个订阅用户,但不是唯一的用户,因为每个用户都可以订阅几个频道,即使他们不使用消息。
我该怎么办?
tl;医生:你的方法很好。
客户可以订阅任意数量的频道,没有任何限制。只有在订阅100个频道或订阅许多私人频道时,才会有任何重大的窃听事件,在这些频道中,每次订阅都会导致身份验证调用(但这可以是分批的)。
从"良好实践"的角度来看,我建议为所有用户接收的全局事件设置一个通道,每个用户都应该有自己的通道,在该通道上发送事件,该用户只能接收。出于安全考虑,我建议用户通道为专用通道。如果你在Laravel中使用事件广播,你需要实现一个身份验证端点,这将需要设置Pusher-Laravel桥。
我推荐使用Pusher构建实时Laravel应用程序(这是我写的——我为Pusher工作)。