2016-12-14 132 views
2

我正在尋找一種解決方案,以便能夠在我的網頁上動態強制刷新所有當前觀衆。如果這是通過PHP完成的話,這將是最簡單的,但我願意接受建議。動態頁面刷新JavaScript/PHP或'Pusher.com'

我已經做了一些研究,並找到了一個可能的解決方案(pusher.com),但我不知道如何執行此操作。這裏是我下面的代碼:我的網頁上

的JavaScript添加到document.ready jQuery的':

var pusher = new Pusher('xxx'); 
var refreshChannel = pusher.subscribe('refreshing'); 
refreshChannel.bind('refresh-event', function() { 
location.reload(true); 
}); 

下面是從他們的官方文檔,我的PHP代碼:

<?php 
require('Pusher.php'); 
$options = array(
'cluster' => 'eu', 
'encrypted' => true 
); 
$pusher = new Pusher(
'xxx', 
'xxx', 
'xxx', 
$options); 

$data['message'] = 'hello world'; 
$pusher->trigger('refresh-event', 'refresh', $data); 

?> 

我知道如何發送像上面顯示的消息,但我不知道如何啓用刷新代碼。有沒有人使用過這個SDK,並知道如何?

或者

會有人知道如何完成這一任務的任何圖書館或解決方案?同樣,我所要做的就是在我需要的時候動態刷新我的網頁給所有當前的觀看者。

回答

1

您回調函數,它是每當信道'refreshing'接收到'refresh-event'refreshChannel.bind(...)第二參數將運行。您的PHP中的$data也會傳遞給該函數,因此您可以使用該事件發送信息。

你這樣做的代碼幾乎是現貨,但它看起來像忘記在JavaScript中設置集羣,因此沒有成功連接。如果您的應用程序是'eu'羣集上,你需要這麼說,當你試圖連接:

var pusher = new Pusher('xxx', { 
    cluster: 'eu', 
    encrypted: true 
}); 

你應該已經越來越在JavaScript控制檯"Could not find app by key xxx. Perhaps you're connecting to the wrong cluster."錯誤,當您嘗試加載頁面。

編輯:另外仔細檢查你的頻道名稱和事件在你的觸發器調用中是錯誤的。這是

$pusher->trigger('channel-name', 'event', $data); 

編輯2:也是在你的JavaScript你調用通道'refreshing'和你的PHP你調用它'refresh'。這些必須是相同的。

1

您的客戶(具有JavaScript代碼的頁面)與pusher.com建立了WebSocket連接。您必須觸發(=發佈數據)通過您的php腳本推送api服務器,推送者會將您的數據(事件名稱+參數)轉發給所有客戶端(連接的套接字)。

如果你有你的php代碼例如在index.php中並通過http訪問它,它會發送數據給推者,他會通知你的客戶。

pusher.com的替代品,你可以創建自己的PHP WebSocket服務器。

利布斯:

socketo.me和 socket.io

+0

感謝您的回覆。我對他們的系統很陌生,不確定你的意思是通過Websocket連接。我沒有看到任何標籤。當我點擊進入我的應用程序時,它顯示我概述|入門|應用程序密鑰|統計|調試|錯誤| Webhook |推送通知| Collab |應用設置。有沒有關於如何創建這個教程的教程? – user6934446

+0

WebSocket是pusher.com的技術。 WebSocket只是一個協議,通過單個TCP連接提供全雙工通信信道。 https://pusher.com/websockets – IamSilviu

+1

打開您放置javascript代碼的頁面,然後在不同的選項卡上使用推送器代碼打開php頁面,並觸發刷新。如果你的客戶端頁面是PHP,那麼PHP推送器代碼不應該在同一頁面上,否則它會形成無限循環。 PHP API>推杆> PHP客戶端(一個或多個), OR PHP客戶端> P​​HP API>推杆> PHP客戶端(一個或多個) – IamSilviu