【发布时间】:2017-04-21 09:08:03
【问题描述】:
我正在使用 Devise 和 gem 'devise_token_auth' 在 Rails 5 API Action Cable 中实现聊天。
我有一个带有参数化订阅的ChatRequestChannel:
stream_from "chat_request_#{chat_request_chanel_token}_channel"
我需要以某种方式可靠地检索 unsubscribed 挂钩内的 chat_request_chanel_token 值 - 以向其他订阅者发送消息。这是我的代码:
class ChatRequestChannel < ApplicationCable::Channel
def subscribed
answerer = params["answerer"]
chat_request_chanel_token = answerer
answerer_user = User.find_by email: answerer
if answerer_user
stream_from "chat_request_#{chat_request_chanel_token}_channel"
else
# http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests
reject
end
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
chat_request_chanel_token = "What to put here????"
message = "Client disconnected"
ActionCable.server.broadcast "chat_request_#{chat_request_chanel_token}_channel",
disconnected: message
end
end
所有客户端订阅ChatRequestChannel 并使用这样的命令(answerer 参数因客户端而异):
{"command":"subscribe","identifier":"{\"channel\":\"ChatRequestChannel\",\"answerer\":\"client1@example.com\"}"}
unsubscribed 钩子实际上是在客户端与 Action Cable 断开连接时调用的。所以我无法向unsubscribed 提供任何参数。
我建议每个客户应该只一个(每个参数)参数化订阅ChatRequestChannel。它是否存储在 Action Cable 中的某个位置并且可以检索?
【问题讨论】: