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

Jar*_*ier 4 queue ajax push-notification websocket laravel

ironMQ在我的Laravel 4应用程序中集成了推送队列,以实现更长时间的运行.我有一些意见执行$.get可能需要30秒.我希望看到其他人正在做什么,以便在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
    });     
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jar*_*ier 11

我在Pusher的帮助下解决了我的问题.这是我做的:

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

Route::post('queue/push', function() {
    return Queue::marshal();
});
Run Code Online (Sandbox Code Playgroud)

安装推杆laravel包.

在我的控制器然后Queue::push我的数据.在关闭内部,我触发了一个新的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();
    });
});
Run Code Online (Sandbox Code Playgroud)

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

$.get('account/tasks/completed');
Run Code Online (Sandbox Code Playgroud)

接下来在我看来我初始化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>
Run Code Online (Sandbox Code Playgroud)

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