Rails faye система уведомлений в реальном времени - PullRequest
2 голосов
/ 07 октября 2011

Я пытаюсь создать простую систему уведомлений в режиме реального времени, чтобы я мог выполнять определенный javascript для определенных действий. Идея относительно проста, хотя у меня возникают проблемы с ее реализацией, но я не уверен, какой путь предпринять после прочтения документации Фей.

Текущие мысли

  • Один уникальный канал faye на каждого вошедшего в систему пользователя, поэтому вы можете передать действие (всплывающее окно, задать текст) только определенному пользователю
  • Один div в макете моего приложения, в который я могу записать текст
  • Один div в моем приложении, который содержит макет для всплывающего окна

Теперь я видел учебник Railscast о Фэй, но Райан работает из метода контроллера / действия create. Я не хочу вставлять вещи в базу данных, просто вызывать функцию JS из любого места (я думаю, что создание помощника приложения было бы хорошей идеей), я просто хотел бы сделать что-то вроде «execute javascript 'set_text'» и выполнить JavaScript 'show_popup'

Какой лучший способ создать такую ​​функциональность с Фэй, в основном мне нужно только

  • Выполнить функцию javascript на определенном канале Faye

Для выполнения всплывающего и текстового сообщения. Потерянный в этом вопрос, кто-нибудь может указать мне верное направление или, может быть, уже создал такую ​​функциональность? THX в Advanche!

1 Ответ

3 голосов
/ 24 ноября 2011

На стороне сервера вы можете просто сделать (для этого требуется eventmachine):

client = Faye::Client.new('http://localhost:9292/faye')
client.publish('/notifications/1', 'alert(1);')

Или через HTTP:

message = {:channel => '/notifications/1', :data => 'alert(1);'}
uri = URI.parse("http://localhost:9292/faye")
Net::HTTP.post_form(uri, :message => message.to_json)

Затем на стороне клиента вы можете сделатьчто-нибудь с данными.

var client = new Faye.Client('http://localhost:9292/faye');
client.subscribe('/notifications/1', function(data) {
  eval(data);
});

Просто замените alert(1); на любой JS, который вы хотите выполнить.

...