2016-04-26 153 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可以得到通知。