如何与使用从客户端传递到服务器的参数用于ActionCable的通道保持连接?

李伊瑟

我并没有actioncable动脑筋。我想允许用户订阅PostChannel看起来像这样的,

class PostNotificationsChannel < ApplicationCable::Channel

  def subscribed
    stream_from params[:post_id]
  end

  def unsubscribed
    stop_all_streams
  end
end

然后我有js

/javascripts/channels/post_notifications.js

$(document).on('turbolinks:load', function() {
  $("a.post_subscribe").click(function subscribeToPost() {
  var post_id = $(this).parents("li").attr("class").split(" ")[0]; // Get the post id off the page
  App.post_notifications = App.cable.subscriptions.create({channel: "PostNotificationsChannel", post_id: post_id}, {

    connected: function() {},

    disconnected: function() {},

    received: function(data) {}
    });
  });
});

因此,单击.post_subscribe锚标记,它将获得我在页面上发布的HTML类的值,然后在预订创建的params哈希中使用该值。这一切都很好,很花哨,单击该用户的用户将对该帖子进行某些操作时得到更新。但是,如果刷新页面,则该连接无法将该消费者重新连接到该帖子,因为哈希中没有参数。因此,我想知道如何摆脱这种情况。

而且,即使在rails guides页面上,它也在此处显示此内容因此它们正在传递参数,但是在重新加载页面时如何保持连接?

萨吉布·沙扎德(Saqib Shahzad)

因此,我从您的问题中了解到的是,当用户单击“订阅”链接时,您希望用户成为该帖子的关注者。为此,您将必须通过在User和Post作为Follower之间建立关联来将此信息存储在数据库中。然后,只要该帖子发生活动,就向该特定帖子的所有关注者的通知流广播通知。

创建一个NotificationsChannel,每个用户登录到该站点时都会订阅该频道,例如,一个ID为1的用户登录后,他将订阅一个对于每个用户都是唯一的通知流,例如notify_user_1_channel

class NotificationsChannel < ApplicationCable::Channel
  def subscribed
    if params[:recepient].present?
      stream_from "notify_#{params[:recepient]}_channel"
    end
  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end
end

在频道脚本中,

App.chat = App.cable.subscriptions.create {
            channel: "NotificationsChannel"
            recepient: $('#recepient').data("recepient")
            }

为了将接收者作为参数,在视图代码的某个位置(最好在页脚中),

<div id="recepient" data-recepient="User_<%= current_user.id %>"></div>

并且,为了将通知广播到流,在通知模型的after_create_commit中,

ActionCable.server.broadcast "notify_#{notification.recepient_type}_#{notification.recepient_id}_channel"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Delphi EMS FireDAC:如何使用EMS将参数从客户端传递到服务器?

如何使用 AJAX 将图像从服务器传递到客户端 Flask

将var从服务器传递到客户端

从服务器到客户端启动ssh连接

我如何将Java对象从服务器端传递到客户端

如何使具有服务器流连接的Android grpc客户端保持活动状态?

客户端突然断开连接后,如何使服务器套接字保持活动状态?

如何使用jquery ajax和node js在快速框架中将数据从客户端传递到服务器?

如何将 JSON 数据从服务器传递到客户端并在 Javascript 中使用数据?

如何将jwt从swift客户端传递到node.js服务器

如何在Meteor中将数据从服务器传递到客户端

如何将CSRF令牌从服务器传递到客户端?

如何安全地将Redux存储从服务器传递到客户端

使用C ++ API使用加密通道将mq客户端连接到mq服务器

如何实现安全且同步的客户端到服务器连接

使用Mockito模拟服务器-客户端连接

使用Flask将JSON数据从服务器传递到客户端

NodeJS - 使用 ajax 将数组从客户端传递到服务器

如何从客户端到服务器读取多行

使用React / redux和Express将客户端参数传递到服务器端(EMPTY_RESPONSE错误)

关闭已在服务器端发送,但客户端仍保持连接

将变量从服务器端控制器传递到客户端以在客户端 JavaScript 中使用

如何在Crystal中打开与WebSocket服务器的连接(使用Crystal作为客户端)

如何使用服务器通过ssh客户端连接2台PC?

使用服务器发送的事件:如何存储与客户端的连接?

Java RMI客户端如何使用域名连接到Java RMI服务器

我不知道如何使用 https 或 wss 连接服务器和客户端

客户端如何使用EC2连接到服务器

如何使用客户端服务器Java程序连接2台计算机