使用推送器的一对一响应

Posted

技术标签:

【中文标题】使用推送器的一对一响应【英文标题】:One to One response using pusher 【发布时间】:2015-01-26 03:16:31 【问题描述】:

我正在尝试使用 laravel 和 pusher 在用户和管理员之间创建一对一的响应。用户没有登录,只是一个访客。当用户访问该站点时,他们会输入一些内容并将其发送给管理员。如果任何管理员在线,他们将单击是或否,然后这将被发送回发送它的用户。

我的问题是我似乎无法让推送者发送回复。我看过这个Pusher one to one chat structure,但我不明白,因为在我的场景中它不是聊天室,而且更具体到聊天室。

无论如何,我都尝试使用会话 ID,但这不起作用,因为用户和管理员不在同一个浏览器上。我想过以某种方式发送带有推送通知消息的会话 ID,但我也知道如何发送,因为管理员在 /admin/events 页面上,而用户在主页上。

这是我的代码

push.js

  var pusher = new Pusher('MY KEY');

  var channel = pusher.subscribe ('client');


  channel.bind('general_response', addMessage);


  var channel = pusher.subscribe ('customer_response');
  //bind to new_response on the channel
  channel.bind('message', addWaitingResponse);

  //user 
  function addMessage (data) 
    //create list item
    var li = $('<div class="response_message"></div>');
    //Get text properity from data
    li.text(data.text);
    //hide it
    li.hide();
    //prepend to messages
    $('#messages').prepend(li);
    li.slideDown();
  

//admin
function addWaitingResponse(data) 
    var li = $('<div class="waiting_approve"> </div> ');
    li.text(data.text);
    li.hide();
    $('#WaitingNotification').prepend(li);
    li.slideDown();
  

订阅和收听

<?php
 namespace Scan\Subscriber;

class NotificationEventSubscriber 

    private $_pusher;
    public function __construct() 

        $this->_pusher = new \Pusher($_ENV['app_key'], $_ENV['app_secret'], $_ENV['app_id']);

    

    //message to admin
    public function onCreate($event) 

            //$pusher = new \Pusher($_ENV['app_key'], $_ENV['app_secret'], $_ENV['app_id']);

            $data = array('text' => $event->track_no 'is awaiting approval');

            $this->_pusher->trigger('customer_response', 'message', $data);

        
        //message to user

    public function onUpdate($event) 
            /*
            | Notify customer
            */

            $message = array('text' => $event->track_no' has been approved ');

            $this->_pusher->trigger('client', 'general_response', $message);


    

    public function subscribe($events) 

            $events->listen('notification.insert','Scan\Subscriber\NotificationEventSubscriber@onCreate');

            $events->listen('notification.update','Scan\Subscriber\NotificationEventSubscriber@onUpdate');

    


当用户发送请求时,我在 laravel 中注册并触发事件。上面的代码只是显示了我如何向用户和管理员显示消息

我的问题是:如何使管理员响应仅发送给发送请求的用户?非常感谢。

【问题讨论】:

【参考方案1】:

听起来你是在正确的路线上。您需要某种方法来创建匿名用户和管理员用户都知道的唯一标识符。然后,该标识符可用于路由消息 - 可能通过 Pusher 通道。

由于用户是匿名的,使用会话 ID 作为该用户的唯一频道名称的一部分似乎是个好主意。

或者,当匿名用户发送帮助请求时,您可以让服务器使用唯一 ID 进行响应。考虑到这一点,下面的图表显示了实现这一目标的潜在方法:

一旦上述过程完成,Admin 和匿名User 现在可以通过触发request_id 标识的通道上的事件进行通信。

【讨论】:

感谢@leggetter 我所做的是将客户端频道存储在数据库中,并确保响应进入该频道。再次感谢 @leggetter,根据您的情况,有一种方法可以让用户知道管理员是否“可用”(监听事件)? @cristian Pusher 确实支持 Presence 频道,因此您可能会使用这些 pusher.com/docs/channels/using_channels/presence-channels 如果admin 用户是成员之一,那么他们就在线。 @leggetter 我可以实时更新管理员在线/离线状态,以供其他客户/用户查看吗?我怎样才能做到这一点? 在线频道提供有关会员是否在频道上的实时更新(在线/离线)。所以,是的。可以在文档中找到更多信息。

以上是关于使用推送器的一对一响应的主要内容,如果未能解决你的问题,请参考以下文章

关于与查询构建器的“一对多”关系的教义内连接

关于多对多分类器的文献

JavaCV音视频开发宝典:UDP推流 使用UDP方式推送TS流 实现UDP一对一直播点播

JavaCV音视频开发宝典:UDP推流 使用UDP方式推送TS流 实现UDP一对一直播点播

我对于层次选择器的理解~

将空范围传递给采用一对迭代器的函数的简洁/简洁的方法是啥?