【发布时间】: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