【问题标题】:Private messages with Faye and Rails与 Faye 和 Rails 的私人消息
【发布时间】:2014-11-26 01:40:22
【问题描述】:

我正在使用the railscast 中提到的faye gem 允许应用推送消息。问题是它将消息推送到所有打开的聊天客户端。我需要他们保密。可以通过 faye 获取私人消息,但它是基于 url。例如,所有消息都将发送到site.com/foo。但是,在我的模型中,聊天没有特定的 url。因为聊天只是该用户发送给您的消息的集合。

因此,如果您以 adam site.com/messages/eve 的身份登录,您将可以与 eve 交谈,但对于 eve,情况正好相反。 site.com/messages/adam。因此,特定于 URL 的私人聊天似乎是不可能的。

任何指针?

messages_controller.rb(触发ajax)

def create
  @message = Message.new(message_params)
  @message.save
end 

create.js.erb(调用广播方法)

<% broadcast params[:message][:username] do %>
  $(".text-wrap").append("<%= current_user.name %> <%= @message.body %></div>");
<% end %>

广播方式(发布到faye服务器)

def broadcast(user, &block)
  channel = "/messages/#{user}"
  message = {:channel => channel, :data => capture(&block)}
  uri = URI.parse("http://localhost:9292/faye")
  Net::HTTP.post_form(uri, :message => message.to_json)
end

application.js(faye 服务器订阅 /messages/*)

$(function(){
    var faye = new Faye.Client('http://localhost:9292/faye');
    var subscription = faye.subscribe('/messages/*', function(message) {
        eval(message);
    });
});

【问题讨论】:

    标签: ruby ruby-on-rails-4 messaging faye railscasts


    【解决方案1】:

    我解决了!问题是我在 application.js 中有订阅功能,这意味着它将在每个页面上运行订阅 javascript。相反,我所做的是在我订阅/messages/eve/adam 的聊天页面视图的底部。我就是这样做的:

    <script>  
      $(function(){
        var faye = new Faye.Client('http://localhost:9292/faye');
        var subscription = faye.subscribe('/messages/#{current_user.username}/#{@user.username}', function(message) {
          eval(message);
        });
      });
    </script>
    

    然后在广播方法中,我确保只将信息发送到正确的地方。

    def broadcast(user, &block)
      channel = "/messages/#{current_user.username}/#{user}"
      message = {:channel => channel, :data => capture(&block)}
      uri = URI.parse("http://localhost:9292/faye")
      Net::HTTP.post_form(uri, :message => message.to_json)
    end 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多