websocket-rails聊天室

时间:2014-07-30 18:06:53

标签: ruby-on-rails ruby-on-rails-4 websocket chat

我正在尝试在Rails中创建类似Whatsapp的消息传递app服务器端,并进行私密对话。现在,我正在尝试实现应用程序的实时部分 - 我正在使用websocket-rails - 而且我不确定如何仅向私人消息中的用户发送消息 - 我在websocket中看到了一个名为私有通道的功能 - rails - 但在阅读文档后,我得到的印象是每个私有频道都需要静态定义,我无法实时创建频道。 你知道如何在websocket-rails中实现私人对话,比如指南或方向?或者我可以用来实现它的任何其他websocket服务?

1 个答案:

答案 0 :(得分:0)

创建订阅时,您可以将参数从客户端传递到服务器端。例如:

# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
  def subscribed
    stream_from "chat_#{params[:room]}"
  end
end

作为subscriptions.create的第一个参数传递的对象成为有线频道中的params散列。关键字频道是必需的:

# app/assets/javascripts/cable/subscriptions/chat.coffee
App.cable.subscriptions.create { channel: "ChatChannel", room: "Best Room" },
  received: (data) ->
    @appendLine(data)

  appendLine: (data) ->
    html = @createLine(data)
    $("[data-chat-room='Best Room']").append(html)

  createLine: (data) ->
    """
    <article class="chat-line">
      <span class="speaker">#{data["sent_by"]}</span>
      <span class="body">#{data["body"]}</span>
    </article>
    """

在您的应用中的某个地方,这可能是

ActionCable.server.broadcast(
  "chat_#{room}",
  sent_by: 'Paul',
  body: 'This is a cool chat app.'
)