0
class MessagesController < ApplicationController
include ActionController::Live
def events
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new response.stream
redis = Redis.new
redis.subscribe(redis_channel) do |on|
on.message do |event, data|
sse.write(data, event: 'messages.create')
end
end
#render nothing: true
rescue IOError
# disco bro!
ensure
redis.quit
sse.close
end
end
// also tried without the SSE.new, so just plain response.stream.write(data)
我的JavaScript是簡單容易的WebSocket不能連接到的ActionController ::現場 - 失敗,200
var socket = new WebSocket("ws://localhost:3000/events")
socket.onmessage = function (event) {
console.log(event);
}
當我在瀏覽器中調用/events
和發送一些消息 - 它的輸出。但如果我們連接插座與JS我們得到
WebSocket connection to 'ws://localhost:3000/petra/events' failed:
Error during WebSocket handshake: Unexpected response code: 200
任何人都可以點亮我嗎?我們是否錯過了某些東西,或者我對自己想要做的事情有錯誤的理解。
SSE和WebSocket是不同的協議。你不能用一個連接到另一個。您應該使用與RoR兼容的websocket庫。 – yiding
http://pastie.org/10359879不會工作呢?所以AC :: Live只支持SSE? –
似乎喜歡它。如果你想使用SSE,你可以改變你的客戶端來使用它,這可以更容易做到:'new EventSource(「/ events」);' – yiding