我正在寻找一种解决方案,能够动态强制刷新我的网页给所有当前的观众。如果这是通过php完成的,那将是最简单的,但我可以接受建议。
我做了一些研究并找到了可能的解决方案(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并且知道怎么做?
替代地
有谁知道如何完成此任务的任何库或解决方案?再一次,我所要做的就是在我需要的时候动态刷新我的网页给所有当前的观众。
答案 0 :(得分:1)
您的客户(包含JavaScript代码的网页)与pusher.com建立了 WebSocket 连接。您必须通过php脚本触发(=发布数据)到pusher api服务器,推送器会将您的数据(事件名称+参数)转发给所有客户端(连接的套接字)。
如果您在index.php中有php代码并通过http访问它,它会将数据发送给pusher,他会通知您的客户。
替代pusher.com,您可以创建自己的php WebSocket服务器。
Libs:
socketo.me和 socket.io
答案 1 :(得分:1)
您回调函数是refreshChannel.bind(...)
的第二个参数,只要在频道'refresh-event'
上收到'refreshing'
,就会运行该参数。 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."
错误。
编辑:在仔细检查时,您的频道名称和事件在触发器调用中是错误的。它&#39; S
$pusher->trigger('channel-name', 'event', $data);
编辑2:您也可以在自己的javascript中调用频道'refreshing'
,并在您的php中调用'refresh'
。这些必须是相同的。