2016-04-26 161 views
0

嗨,大家好,我有Pusher的以下代码,我测试过,并且它好像用于例子。推送私人或公共?

的Javascript在推钢app.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> 

推钢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)我建立的活动流,我意识到即使没有私营前缀(公共频道),只要在PHP服务器端我在$小心推送器触发器('频道名称','EVENT_NAME',$ data),并确保用户is_logged_in(),即使我的所有频道都是公开的,似乎也没有问题。

使用公共频道有什么缺点,以及我什么时候需要使用私人频道?而在上面的例子中,只需添加私人前缀,我已经可以轻松收听频道了,但我不明白它有多安全。

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

' 

2)I想有其他用户“跟随”其他用户,所以当用户A和用户B如下:用户C,用户A和用户B每当用户C增加会收到通知一个博客。因此,如果用户A跟踪1000个用户,我的意思是我需要创建1000个不同的频道?

我有上面的表,如果我有userA的东西我想发送给他的追随者,我从上面的表中获得追随者,unserialise并发送给他们每个人。

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

' 

3)在上述的JavaScript代码的情况下,我不希望把它作为内联Javascript代码,并希望把它放在分离的推动器 - client.js。我可以知道如何动态地将CHANNEL_NAME回显到pusher-client.js,或者有其他方法吗?

回答

0

什么是使用公共频道的缺点,而当我 实际上必须使用专用通道?而在上面的例子中,通过 只需添加私有前缀,我已经很容易收听到这个频道,我不明白它有多安全。

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

私人通道具有认证机制,所以通过在验证方法上实现逻辑代码,它可以拒绝未经授权的订阅。

那么如何为每个“跟随”创建一个新的频道?我卡在这里 ,我不明白算法,以更好地实现这一点。

一其次是F1,F2,F3 通道名称应该是:以下-A 那么当发布博客,F1,F2,F3可以得到通知。