2013-07-26 35 views
0

enter image description hereenter image description here我对pusher.com非常陌生: 我正在尝试设置一个在线通道聊天。Pusher Window刷新问题

这里是我的代码:

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){... 

GET被解雇。 所以,一个窗口的更新之后,用户从我的名单中删除,并 1秒钟后,用户再次被添加到列表....

1)刷新1个浏览器窗口

2)其他窗口触发“推:member_removed”:用户从列表中删除

3)其他窗口触发“推:member_added”:用户添加到列表中agein

怎么办?

回答

1

第二个窗口收到pusher:member_removed,因为第一个窗口已卸载,因此用户已离开存在通道。当第二个窗口重新加载并且用户重新订阅到存在信道时,pusher:member_added被触发。

这是预期的行为。

然而,推杆做的,以试图阻止在这种情况下被触发的事件添加一个延迟这些事件。在你的情况下,似乎延迟时间不足以阻止发生。在你的情况有提供​​关于你可以做什么来解决一些这方面的信息的常见问题解答:

+0

好的......感谢您的回复。我决定不再使用推送器了。我正在学习XMPP ;-) –

0

它只是解决了。

试试这个。

推仪表盘 - >网络挂接

,并添加网络挂接网址&事件类型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"); 
} 

更多详细信息请参阅文档。

https://pusher.com/docs/webhooks