【问题标题】:Pusher Private or Public?Pusher 私人还是公共?
【发布时间】:2016-04-26 21:32:47
【问题描述】:

嗨,伙计们,我有以下来自 Pusher 的代码,我进行了测试,看起来可以使用,例如。

Pusher-app.php 中的 JavaScript

    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>

Pusher-server.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 和 echo 到 javascript,因此每个用户都将拥有自己独特的频道,因为 javascript 中指定的频道由服务器端脚本控制。

我的问题

1) 我正在构建一个活动流,我意识到即使没有 private- 前缀(公共频道),只要 PHP 中的服务器端我在 $pusher-trigger('CHANNEL NAME', 'EVENT_NAME', $data) 并确保用户 is_logged_in(),即使我的所有频道都公开,似乎也没有问题。

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

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

'

2) 我想让其他用户“关注”其他用户,所以当用户 A 和用户 B 关注用户 C 时,用户 A 和用户 B 会在用户 C 添加博客时收到通知。那么如果用户 A 关注了 1000 个用户,我的意思是我需要创建 1000 个不同的频道吗?

我有上面的表格,如果我有来自 userA 的东西我想发送给他的追随者,我从上面的表格中获取追随者,反序列化并发送给他们每个人。

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

  '

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

【问题讨论】:

    标签: javascript php pusher


    【解决方案1】:

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

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

    私有频道有鉴权机制,通过在鉴权方法上实现逻辑代码,可以拒绝未经授权的订阅。

    那么如何为每个“关注者”创建一个新频道?我被困在这里 而且我不了解更好地实现这一点的算法。

    A 后面跟着 F1、F2、F3 频道名称应为:following-A 那么当A发布博客时,可以通知F1、F2、F3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-24
      • 2020-11-22
      • 2016-12-07
      • 1970-01-01
      • 2015-12-11
      • 2014-07-14
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多