我是pusher.com的新手:
我正在尝试设置在线频道聊天。
这是我的代码:
var PresenceChannel = pusher.subscribe('presence-test_channel');
PresenceChannel.bind('pusher:subscription_succeeded', function(members){
$("#chatMembers").empty();
members.each(function(member) {
$("#chatMembers").prepend("<li id='"+member.info.employee_id+"'>"+member.info.customer_id+"</li>");
});
});
PresenceChannel.bind('pusher:member_added',function(member){
$("#chatMembers").prepend("<li id='"+member.info.employee_id+"'>"+member.info.customer_id+"</li>");
});
PresenceChannel.bind('pusher:member_removed',function(member){
$("li#"+member.info.employee_id).remove();
});
按预期工作。
但我有一个问题:
当我刷新其中一个打开的浏览器窗口时,会触发以下事件:
PresenceChannel.bind('pusher:member_added',function(member){...
直接在那之后,
PresenceChannel.bind('pusher:member_removed',function(member){...
被解雇了。 因此,刷新一个窗口后,用户将从我的列表中删除,并且 1秒后,用户再次被添加到列表....
1)重新加载1个浏览器窗口
2)另一个窗口触发'pusher:member_removed':用户从列表
中删除3)另一个窗口触发'pusher:member_added':用户添加到列表agein
怎么办?
答案 0 :(得分:1)
第二个窗口收到pusher:member_removed
,因为第一个窗口已卸载,因此用户已离开状态通道。当第二个窗口重新加载并且用户重新订阅状态通道时,会触发pusher:member_added
。
这是预期的行为。
但是,Pusher会为这些事件添加延迟,以便尝试阻止在此方案中触发事件。在你的情况下,似乎延迟时间不足以阻止这种情况发生。在您的情况下,有一个常见问题解答,提供了一些有关解决此问题的方法的信息:
答案 1 :(得分:0)
简单地解决了。
试试这个。
Pusher仪表板 - &gt;网络挂接
并添加Webhook网址&amp;事件类型为Presense。
$app_secret = 'YOUR PUSHER SECRET KEY';
$app_key = $request->headers->get('X-Pusher-Key');
$webhook_signature = $request->headers->get('X-Pusher-Signature');
$body = file_get_contents('php://input');
$expected_signature = hash_hmac( 'sha256', $body, $app_secret, false );
if($webhook_signature == $expected_signature) {
// decode as associative array
$payload = json_decode( $body, true );
foreach($payload['events'] as &$event) {
// do something with the event
if ($event['name'] == 'member_added') {
// do process user joind & trigger message
$this->setAddMember($event);
} elseif ($event['name'] == 'member_removed') {
// do process user out & trigger message
$this->setRemoveMember($event);
}
}
header("Status: 200 OK");
}
else {
header("Status: 401 Not authenticated");
}
更详细的信息请参阅此文档。