Ruby Faye和Rails的私人消息
我正在使用允许应用程序推送消息的功能。问题是它将消息推送到所有打开的聊天客户端。我需要他们保密。可以通过faye获得私人消息,但它是基于url的。例如,所有消息都将发送到Ruby Faye和Rails的私人消息,ruby,ruby-on-rails-4,messaging,faye,railscasts,Ruby,Ruby On Rails 4,Messaging,Faye,Railscasts,我正在使用允许应用程序推送消息的功能。问题是它将消息推送到所有打开的聊天客户端。我需要他们保密。可以通过faye获得私人消息,但它是基于url的。例如,所有消息都将发送到site.com/foo。但是,在我的模型中,聊天没有特定的url。因为聊天只是该用户发送给您的消息的集合 因此,如果你以adamsite.com/messages/eve的身份登录,你可以与夏娃交谈,但对夏娃来说则相反site.com/messages/adam。因此,特定于URL的私人聊天似乎是不可能的 有什么建议吗 消息\
site.com/foo
。但是,在我的模型中,聊天没有特定的url。因为聊天只是该用户发送给您的消息的集合
因此,如果你以adamsite.com/messages/eve
的身份登录,你可以与夏娃交谈,但对夏娃来说则相反site.com/messages/adam
。因此,特定于URL的私人聊天似乎是不可能的
有什么建议吗
消息\u controller.rb(触发ajax)
create.js.erb(调用广播方法)
application.js(faye服务器订阅/messages/*)
我解决了!问题是我在application.js中有subscribe函数,这意味着它将在每个页面上运行subscribe 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>
<% broadcast params[:message][:username] do %>
$(".text-wrap").append("<%= current_user.name %> <%= @message.body %></div>");
<% end %>
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
$(function(){
var faye = new Faye.Client('http://localhost:9292/faye');
var subscription = faye.subscribe('/messages/*', function(message) {
eval(message);
});
});
<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