如何向客户端广播消息,而不订阅Action Cable中的主题

时间:2018-09-17 07:21:26

标签: ruby-on-rails actioncable

我想使用动作电缆(第5条)创建聊天应用。

当客户端登录该应用程序时,我发送消息以订阅该频道。频道将根据current_user的{​​{1}}流式传输以进行连接。 用户发送消息时,它将发送给所有订阅该频道的人 这是动作电缆的正常流动。

这是我的频道:

room_id

但是我不知道客户端何时将消息发送给不在房间的新用户。流未创建。对方如何接收消息并保持对话继续进行?

1 个答案:

答案 0 :(得分:0)

对于正在发送消息的用户,您可以在消息模型中创建一个回调,该回调在创建消息时广播到您的频道。我假设您创建了正确的关联。即客房has_many消息。依次发送的消息belongs_to RoomUser 像这样:

class Message < ApplicationRecord
    after_create :broadcast_to_room
    .......
    private
    def broadcast_to_room
        @room = self.room
        RoomChannel.broadcast_to(@room, message: self)
    end
    .........
end

因此,无论何时创建一条消息,它都会广播到该消息所属的房间。 您的RoomChannel可以像这样:

class RoomChannel < ApplicationCable::Channel
    def subscribed
        room = Room.find(params[:id])
        stream_for room
    end
end

现在,在会议室的从头开始的页面中,您应该具有一个用于侦听传入消息的功能。因此,当收到一条消息时,您的听众会收到并显示消息。 我写了一个here要点,说明如何在客户端中使用actioncable(以react-native方式)。在您的客户端中,创建一个用于侦听传入消息的套接字。