Добавление настраиваемых полей в ответ на подписку с помощью сервера faye ruby

Я пытаюсь написать концептуальное приложение для чата, используя faye (пример чата, включенный в дистрибутив).

В моем доказательстве концепции я хочу отправить полную историю канала чата, когда клиент подписывается на канал. Моя текущая идея заключалась в том, чтобы реализовать это с помощью настраиваемого поля в сообщении ответа на подписку.

После проверки определения протокола Bayeux кажется, что поле 'ext' допускается в ответном сообщении подписки.

Но я не смог ничего добавить в это поле ext, используя расширение сервера.

class ServerLog
  def incoming(message, callback)
    puts " msg: #{message}"
    unless message['channel'] == '/meta/subscribe'
      return callback.call(message)
    end

    # the following line changes absolutely nothing
    message['ext'] = 'foo'

    callback.call(message)
  end
end

App.add_extension(ServerLog.new)

Хотя настройка поля ext не приводит к сбою сервера, она абсолютно не влияет на ответное сообщение о подписке. Я даже проверил с помощью Wireshark (просто чтобы убедиться, что клиент js не игнорирует некоторые поля).


person bb-generation    schedule 21.07.2014    source источник


Ответы (1)


Моя ошибка заключалась в использовании метода «входящий», а не «исходящий».

class ServerLog
  def outgoing(message, callback)
    puts " out: #{message}#"
    unless message['channel'] == '/meta/subscribe'
      return callback.call(message)
    end

    if message['subscription'] == '/chat/specialchannel'
      message['ext'] ||= {}
      message['ext']['specialattribute'] = 'special value'
    end

    callback.call(message)

  end
end

App.add_extension(ServerLog.new)

В этом примере specialattribute будет добавлено в поле ext ответного сообщения о подписке (если канал /chat/specialchannel).

person Community    schedule 22.07.2014