Как мне получить клиент Faye с идентификатором клиента?

Faye позволяет отслеживать различные события, такие как handshake или subscribe. Этим блокам обратного вызова предоставляется только значение client_id, а не сам клиент. Например:

server = Faye::RackAdapter.new(mount: '/faye', timeout: 45)

server.bind(:handshake) do |client_id|
  puts "Received handshake from #{client_id}"
end

Как я могу получить доступ к клиенту, учитывая client_id? Или как я могу получить доступ к дополнительной информации в рукопожатии, такой как файлы cookie, указанные в заголовке запроса (если эта информация вообще доступна)?


person Matt Huggins    schedule 18.09.2012    source источник


Ответы (1)


Я думаю, что мой первоначальный вопрос основан на непонимании того, как работает Фэй в двух отношениях. Вместо того, чтобы удалять свой вопрос, я отвечу на него всем, кто столкнется с подобным вопросом. (Если мой ответ неверен, пожалуйста, прокомментируйте или отредактируйте!)

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

Во-вторых, код, который я вставил в вопрос, касается мониторинга. Что мне действительно нужно, так это расширение.

Чтобы добиться аутентификации с учетом моего первоначального вопроса, мне нужно передать любое необходимое значение аутентификации (будь то значение cookie, токен аутентификации и т. д.) как часть значения message['ext'] (согласно примеру на странице расширений). Затем на стороне сервера мне нужно прослушать сообщения на канале /meta/handshake, установив message['error'] в какое-то значение в случае значения.

person Matt Huggins    schedule 20.09.2012