与Faye和Rails的私人消息

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

因此,如果您以adam site.com/messages/eve身份登录,那么您可以与前夕交谈,但前夕则相反。 site.com/messages/adam 。 因此,特定于URL的私人聊天似乎是不可能的。

有什么指针吗?

messages_controller.rb (触发ajax)

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

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

  $(".text-wrap").append(" 
");

广播方法 (发布到王菲服务器)

 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); }); }); 

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

  

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

 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