gpt4 book ai didi

ajax - 如何 : Get real-time notifications in Laravel 4 using Iron. io MQ、推送队列和 AJAX

转载 作者:行者123 更新时间:2023-12-01 13:49:18 25 4
gpt4 key购买 nike

我已集成 ironMQ在我的 Laravel 4 应用程序中推送队列以延长运行时间。我有一些 View 执行 $.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
});
}

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

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

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

最佳答案

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

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

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

已安装 pusher laravel package .

在我的 Controller 中,然后我 Queue::push我的数据。在闭包内部,我触发了一个新的 Pusher channel 。这显然只会在 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,订阅事件并绑定(bind) get_completed_tasks到 Pusher channel 。现在我们只需要等待来自 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,剩下的就变得轻而易举了。希望这对某人有帮助!

关于ajax - 如何 : Get real-time notifications in Laravel 4 using Iron. io MQ、推送队列和 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20129033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com