gpt4 book ai didi

ruby-on-rails - 使用 sse 在 ruby​​ on rails 4 中进行异步响应

转载 作者:行者123 更新时间:2023-12-04 03:58:08 26 4
gpt4 key购买 nike

我想在 rails 4 中使用服务器发送的事件。我已阅读 this关于它的好文章。然而,它没有提到如何以一种可以设置事件发生时触发的回调的方式使用。一旦模型发生更改,我需要能够通过 SSE 连接向客户端推送。我想将这些更改推送给与我有开放 SSE 连接的任何用户。基本上我需要知道如何在 rails 4 中进行异步事件调用。此外,如果我没有其他选择来完成这项任务,是否很容易完成这样的任务?假设是一个实时聊天应用程序。

最佳答案

您必须使用 ActionController::Live在 Rails 中,或类似 Pusher如果您习惯使用第三方应用程序:

教程

有一个很good tutorial here

详情

创建“实时”功能更像是“附加”而不是 Rails 的原生功能集

您基本上必须通过 Javascript 连接到服务器的“ channel ”,Rails 会不断向该 channel 发送更新

问题是 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

这意味着连接到服务器“ channel ”的每个人都会收到更新(而不仅仅是在 Ajax 中接收更新的个人)

channel

创建“私有(private)”直播功能的方式,基本需要使用 "channels"

这些允许您将数据发送给特定的个人(用于私有(private)消息等),从而让您创造更丰富的体验

关于ruby-on-rails - 使用 sse 在 ruby​​ on rails 4 中进行异步响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21763527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com