我會解釋這是如何工作的,你
HTTP
當你發送請求到Rails的,您的瀏覽器沒有任何方法來「聽」會發生什麼除了直接回應之外的任何事情。該HTTP request是「已發送」 &沒有任何機制來等待異步過程完成
你的任務是爲您的應用「監聽器」,使他們產生你的前端可以接收更新(出的HTTP範圍內),因此websocket或SSE東西
我們已經建立了,你在找什麼之前,使用Pusher
「直播」
實現「活」的功能是什麼,你需要
這基本上意味着保持請求打開「永久」服務器;聆聽服務器發回的任何「事件」。這是通過JS在前端完成的,客戶端將「訂閱」一個頻道(通常是以用戶爲中心的頻道),然後將所有數據發送到它。
我們使用第三方系統稱爲Pusher
近日來實現這一目標:
#GemFile
gem "pusher", "~> 0.12.0"
#app/controllers/message.rb
def send_message
public_key = self.user.public_key
Pusher['private-user-' + public_key].trigger('message_sent', {
message: "Message Sent"
})
end
#app/assets/javascripts/application.js
pusher = new Pusher("***********",
cluster: 'eu'
)
channel = pusher.subscribe("private-user-#{gon.user}")
channel.bind "message_sent", (data) ->
alert data.message
希望這給你
你選擇另一種選擇是輪詢(如您已確定)和WebSockets的(王菲什麼用途)。有一些項目可以將WebSocket服務器注入到您的Rails應用程序中。不過你需要一個多線程服務器(就像Puma)。 – Wukerplank
如果後臺工作不會永久運行,則輪詢聽起來不錯。 – emaillenin