aya*_*ing 9 asynchronous ruby-on-rails live-streaming server-sent-events ruby-on-rails-4
我想用在轨4.服务器发送的事件我已阅读本关于它的大文章.尽管如此,它没有提到如何使用一种方式来设置事件发生时触发的回调.我需要能够在模型中进行更改后立即通过SSE连接推送到客户端.我想将这些更改推送给任何与我有开放SSE连接的用户.基本上我需要知道如何在rails 4中进行异步事件调用.此外,如果没有其他选择我可以轻松完成这样的任务吗?让我们说一个实时的聊天应用程序.
如果您习惯使用第三方应用程序,则必须在Rails中使用ActionController :: Live,或者使用Pusher之类的东西:
教程
这里有一个非常好的教程
细节
创建"实时"功能更像是一个"螺栓固定"而不是Rails的本机功能集
您基本上必须通过Javascript连接到服务器的"频道",Rails将继续向该频道发送更新
问题是Rails通常处理HTTP请求(您发送请求,Rails提供响应).这给Rails带来了一个问题,因为异步性不在其核心设计范例中
您使用SEE或Websockets体验的实时连接根本不是实时连接 - 它只是一个永久连接.ActionController :: Live允许Rails在标准"HTTP"请求结构之上呈现请求
这个怎么运作
我认为实时功能是"永久的ajax"
与"标准"ajax一样,您可以直接从渲染页面发送请求(没有什么特别之处).和"标准"ajax一样,您还需要使用客户端引擎(Javascript)处理返回的数据
区别在于"标准"ajax,"实时"功能可以由服务器启动(因此SEE的相对突出):
class MessagingController < ApplicationController
include ActionController::Live
def send_message
response.headers['Content-Type'] = 'text/event-stream'
10.times {
response.stream.write "This is a test Messagen"
sleep 1
}
response.stream.close
end
end
Run Code Online (Sandbox Code Playgroud)
这意味着连接到服务器"通道"的每个人都会收到更新(而不仅仅是在Ajax中接收更新的个人)
通道
创建"私人"实时功能的方法,你基本上需要使用"频道"
这些允许您将数据发送给特定的个人(用于私人消息等),使您可以创建更丰富的体验