Ruby on rails 行动线:如何传递错过的聊天信息

Ruby on rails 行动线:如何传递错过的聊天信息,ruby-on-rails,actioncable,Ruby On Rails,Actioncable,在聊天中传递错过的信息的好方法是什么?例如,使用Action Cable?例如,当你关闭笔记本电脑并再次打开它时,你没有重新加载页面,但你可能错过了信息 一种方法是使用Action Cable进行AJAX调用,但我必须复制接收消息时发生的一些逻辑。如果可能的话,我只想重复使用Action Cable,当然要将它们存储在数据库中。并在每次重新订阅Action Cable时从数据库中加载它们。我假设您已看到每条消息的状态(在时间戳处读取),并且您的web套接字未关闭(关闭笔记本电脑或关闭浏览器将关闭

在聊天中传递错过的信息的好方法是什么?例如,使用Action Cable?例如,当你关闭笔记本电脑并再次打开它时,你没有重新加载页面,但你可能错过了信息


一种方法是使用Action Cable进行AJAX调用,但我必须复制接收消息时发生的一些逻辑。如果可能的话,我只想重复使用Action Cable,当然要将它们存储在数据库中。并在每次重新订阅Action Cable时从数据库中加载它们。

我假设您已看到每条消息的状态(在时间戳处读取),并且您的web套接字未关闭(关闭笔记本电脑或关闭浏览器将关闭它)

我将创建后台任务,检查所有订阅的频道是否有未看到的消息。 假设您有用户订阅的“message_234”频道,并且在您的表中有一些read_at为零的消息。然后通过后台任务将它们广播给用户。 将超时时间设置为1天,以使其不过载,并对您的邮件通知频道执行相同操作。

您可以使用
\35; subscribed
发送过去的邮件

不幸的是,这种简便的方法几乎没有文档记录,在当前的文档中也没有提到。但自Action Cable推出以来,所有版本都应适用

下面是一个例子:

def subscribed
  lobby = Lobby.find(params[:lobby])
  stream_from(stream_name)
  lobby.messages.order(created_at: :asc).each do |message|
    transmit(message.to_json)
  end
end

包括一些你的动作电报。为什么要投否决票?否则你是不可能做到的。