如何在客户端组织Pusher JS库绑定到多个通道并监听多个事件


How to organize Pusher JS Library in the client side to bind to several channels and listen to several events?

我正在使用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工作)。