推手私人或公共

Pusher Private or Public?

本文关键字:推手      更新时间:2023-09-26

嗨,伙计们,我有以下来自 Pusher 的代码,我测试过,

例如使用似乎还可以。

Pusher-app 中的 Javascript.php

    var pusher = new Pusher('OMITTED_MY_API_KEY', {
         cluster: 'ap1',
         encrypted: true
     });
     var channel = pusher.subscribe('**private_username-id**');
         channel.bind('my_event', function(data) {
     alert(data.message);
});
    </script>

推送服务器.php

require('Pusher.php');
    $options = array(
    'cluster' => 'ap1',
    'encrypted' => true
);
    $pusher = new Pusher(
       'OMMITED_API_KEY',
       'OMMITED_API_KEY',
       'OMMITED_API_KEY',
       $options
    );
    $data['message'] = 'hello world';
    $pusher->trigger('**private_user_name-id**', 'my_event', $data);

用户表

  ----------------------------------------------
  | ID | username | password | notify_channel  |
  |--------------------------------------------|
  | 1  |  userA   | kjdiejdk | private_userA-1 |  
  | 2  |  userB   | kjdiejdk | private_userB-2 |  
  | 3  |  userC   | kjdiejdk | private_userC-3 |  
   ---------------------------------------------

关注者表

---------------------------------------------------------------------------
| INDEX | USERID | FOLLOWERS                                               |
|--------------------------------------------------------------------------|
|   1   | userA  | s:47:"array('id' => userA, 'id'=>userC, 'id' =>userD)"; |
---------------------------------------------------------------------------

对于我的每个wordpress用户,我创建了一个数据库列"NOTIFY-CHANNEL",在这种情况下,为该特定用户调用private_username-id的通道。

通道名称将从数据库中$wpdb>get_rows并回显到 javascript,因此每个用户都将拥有自己唯一的通道,因为 javascript 中指定的通道由服务器端脚本控制。

我的问题

1)我正在构建一个活动流,我意识到即使没有私有前缀(公共频道),只要PHP中的服务器端我小心$pusher触发器("频道名称","EVENT_NAME",$data)并确保用户is_logged_in(),即使我所有的频道都公开,似乎也没有问题。

使用

公共频道的缺点是什么,我什么时候必须实际使用专用频道?在上面的实例中,只需添加 private- 前缀并且我已经可以轻松收听该频道,我看不到它的安全性。

因此,在我继续进一步使用推送器进行活动流和网站通知之前,任何过去的用户都可以启发我应该如何更好地做到这一点?

'

2)我想让其他用户"关注"其他用户,因此当用户A和用户B关注用户C时,每当用户C添加博客时,用户A和用户B都会收到通知。因此,如果用户 A 关注 1000 个用户,我的意思是我需要创建 1000 个不同的频道吗?

我有上面的表格,如果我有来自用户 A 的内容,我想发送给他的关注者,我会从上表中获取关注者,取消序列化并发送给他们每个人。

那么如何为每个"关注"创建一个新频道呢?我被困在这里,我不明白更好地实现这一点的算法。

  '

3)对于上面的javascript代码,我不希望将其作为内联Javascript代码,而是希望将其放在单独的pusher-client.js中。我可以知道如何动态地将CHANNEL_NAME回显到推送器客户端.js还是有其他方法?

使用公共频道有什么缺点,我什么时候该 实际上必须使用私人频道?在上面的例子中,通过 只需添加私有前缀,我已经很容易听了 频道,我看不出它有多安全。

使用公共频道的缺点是,任何人都可以订阅频道,并监听该频道上的事件触发。想想一个私信服务,如果用户A在频道C与用户B聊天,用户X订阅频道C,X可以查看A和B之间的所有消息。

专用通道具有身份验证机制,因此通过在身份验证方法上实现逻辑代码,它可以拒绝未经授权的订阅。

那么如何为每个"关注"创建一个新频道呢?我被困在这里 而且我不明白算法可以更好地实现这一点。

A 后跟 F1、F2、F3频道名称应为:以下-A然后当 A 发布博客时,可以通知 F1、F2、F3。

相关文章: