Ruby on rails HTML5和rails
我以前使用html5 eventsource从服务器(确切地说,从jsp页面)接收数据。我目前正在研究rails,据我所知,我们需要使用像faye这样的gem和webrick一起运行一个单独的服务器,以便在rails中完成同样的事情。真的是这样吗?我不能简单地让我的eventsource监听rails URL吗? 非常感谢。Ruby on rails HTML5和rails,ruby-on-rails,html,push,Ruby On Rails,Html,Push,我以前使用html5 eventsource从服务器(确切地说,从jsp页面)接收数据。我目前正在研究rails,据我所知,我们需要使用像faye这样的gem和webrick一起运行一个单独的服务器,以便在rails中完成同样的事情。真的是这样吗?我不能简单地让我的eventsource监听rails URL吗? 非常感谢。 编辑:rails 3.:) ActionController::Live::SSE 您可以在Rails中监听您想要的任何端点—区别在于您必须使用它 这将需要在您发送请求时调
编辑:rails 3.:) ActionController::Live::SSE 您可以在Rails中监听您想要的任何端点—区别在于您必须使用它 这将需要在您发送请求时调用,您的前端将能够捕获它将提供的任何响应。诚然,我以前没有使用“本机”设置实现过这一点(我们只在生产中使用过) 但是,您可以从以下方面获益: --
至于实现的进一步复杂性,我现在还没有。如果你想让我写一篇关于Pusher的文章,如果你留下评论(它是最具伸缩性和健壮性的)我不知道ActionController::Live在“Rails 3”中可用哦,对不起,它不是!我的缺点:(你想让我删除答案吗?我用em websocket解决了这个问题。事实证明,由于
thin
在不同的端口上运行,维护websocket客户端列表和发送双向MSG非常容易。无论如何,感谢Rich的努力
#config/routes.rb
get "test" => "tests#test"
#app/controllers/tests_controller.rb
class TestsController < ApplicationController
include ActionController::Live
def test
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream, retry: 300, event: "event-name")
sse.write({ name: 'Test'})
ensure
sse.close
end
end
#app/assets/javascripts/application.js
var source = new EventSource("/test");
source.onmessage = function(event) {
alert(event.data);
};