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,其余的都是轻而易举的.希望这有助于某人! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |