微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HOW TO:使用Iron.io MQ,Push Queues和AJAX在Laravel 4中获取实时通知

我在我的Laravel 4应用程序中集成了ironMQ推送队列,以实现更长时间的运行.我有一些视图执行可能需要30秒的$.get.我希望看到其他人正在做什么,以便在完成ironMQ推送回端点时轻松收到通知.

我将使用推送队列进行的一个示例:

public function getCompletedTasks() {

    $user = User::find(Auth::user()->id);

    Queue::push(function($job) use ($user) {
        $recent = new Recent;
        $tasks  = $recent->getCompletedTasks($user);
        // append data from $tasks to DOM
        // here's where I want to receive my notification
    });     
}

在这里,我只是从API中获取用户数据匹配的任务.

我知道我可以将响应数据存储到数据库并使用AJAX长轮询来不断检查数据,但对于大多数情况我似乎需要做太多工作.我对websockets知之甚少.你们在这些情况下做了什么类型的事情?如果你有任何非常有用的例子.谢谢.

更新:使用Pusher解决了这个问题.看我的回答.

解决方法

我能够在 Pusher的帮助下解决我的问题.这就是我所做的:

正常设置我的Iron MQ推送队列.在routes.PHP中:

Route::post('queue/push',function() {
    return Queue::marshal();
});

安装pusher laravel package.

在我的控制器中然后我队列::推送我的数据.在关闭内部,我触发了一个新的Pusher通道.这显然只会在从IronMQ返回数据时触发.

public function getCompletedTasks() {

    $user = User::find(Auth::user()->id);

    Queue::push(function($job) use ($user) {

        $recent = new Recent;
        $tasks  = $recent->getCompletedTasks($user);

        $pusher = new Pusher('xxx','xxx','xxx');
        $pusher->trigger('reports','get_completed_tasks',array('tasks' => $tasks));

        $job->delete();
    });
});

接下来在我的视图中,我调用我的AJAX函数没有回调,因为我还没有做任何其他事情:

$.get('account/tasks/completed');

接下来在我看来我初始化Pusher,订阅事件并将get_completed_tasks绑定到Pusher通道.现在我们只是等待Pusher的响应,这将允许我执行我原来的AJAX请求的后半部分:

{{ HTML::script('//js.pusher.com/2.1/pusher.min.js') }}
<script>
var pusher  = new Pusher('xxx');
var channel = pusher.subscribe('reports');
    channel.bind('get_completed_tasks',function(data) {
        // do something with the data returned
    });
</script>

一旦我在我的应用程序中使用Pusher,其余的都是轻而易举的.希望这有助于某人!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐