2013-11-21 37 views
4

我已經集成ironMQ推送隊列在我Laravel 4應用更長的運行的進程。我有一些意見,執行$.get可能需要30秒。我想看看別人正在做什麼,以便在ironMQ完成推回到端點時輕鬆獲得通知。HOW TO:獲取Laravel 4實時通知使用Iron.io MQ,推送隊列和AJAX

什麼,我將與推送隊列中大多是做一個例子:

從匹配用戶數據的API
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長輪詢不斷地檢查數據,但它似乎是我需要做這大多數情況下,太多的工作。我對websocket瞭解不多。你們在這些情況下做了哪些類型的事情?如果你有任何有用的例子。謝謝。

UPDATE:使用推杆解決的問題。看到我的答案。

+0

有用於當IronMQ成功地推到端點任何通知,但您可以使用錯誤隊列功能來知道什麼時候IronMQ未能成功交付的消息。不知道這是否有助於您的方案。 –

回答

11

我能解決我的問題與Pusher幫助。以下是我所做的:

正常設置我的Iron MQ推送隊列。在routes.php

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

安裝pusher laravel package

在我的控制器然後我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(); 
    }); 
}); 

下一頁在我看來,我把我的AJAX功能沒有回調,因爲我不會做別的,只是還沒有:

$.get('account/tasks/completed'); 

下一頁在我看來,我推初始化,訂閱事件並將get_completed_tasks綁定到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> 

有一次,我在我的應用程序使用推,其餘的全是一件輕而易舉的事。希望這可以幫助別人!

+0

太貴了。有另一種方法嗎? – 2015-04-15 04:38:47

+0

您可以推出自己的通知服務器。沙盒模式下的免費帳戶可能會滿足您的需求。如果沒有,我會認爲Pusher或類似的低價格將遠遠超過配置和建立自己的解決方案的成本。 –

+0

你的意思是說,你只使用免費功能?真?因爲我現在要嘗試它。我只需要通知生日。免費測試賬戶可以做到這一點嗎? – 2015-04-15 05:49:12