Я использую faye gem, помеченный в the railscast, что позволяет приложениям нажимать сообщения. Проблема заключается в том, что он посылает сообщения всем открытым чат-клиентам. Мне нужно, чтобы они были частными. Можно получить личные сообщения с faye, но это основано на URL. Например, все сообщения будут отправлены на номер site.com/foo
. Но в моей модели чат не имеет определенного URL-адреса. Поскольку чат - это всего лишь набор сообщений, отправленных вам этим пользователем.Личные сообщения с Faye и Rails
Итак, если вы вошли в систему, так как adam site.com/messages/eve
позволит вам разговаривать с кануном, но для кануна это наоборот. site.com/messages/adam
. Таким образом, конкретный частный чат, похоже, не может быть и речи.
Любые указатели?
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 (подписка Фей сервера в/сообщений/*)
$(function(){
var faye = new Faye.Client('http://localhost:9292/faye');
var subscription = faye.subscribe('/messages/*', function(message) {
eval(message);
});
});