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,其余的都是轻而易举的.希望这有助于某人!
| 归档时间: |
|
| 查看次数: |
6311 次 |
| 最近记录: |