我在我的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 }); }
我知道我可以将响应数据存储到数据库并使用AJAX长轮询来不断检查数据,但对于大多数情况我似乎需要做太多工作.我对websockets知之甚少.你们在这些情况下做了什么类型的事情?如果你有任何非常有用的例子.谢谢.
更新:使用Pusher解决了这个问题.看我的回答.
解决方法
我能够在
Pusher的帮助下解决我的问题.这就是我所做的:
正常设置我的Iron MQ推送队列.在routes.PHP中:
Route::post('queue/push',function() { return Queue::marshal(); });
在我的控制器中然后我队列::推送我的数据.在关闭内部,我触发了一个新的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] 举报,一经查实,本站将立刻删除。