2

Faye 允许您监控各种事件,例如handshakesubscribe。这些回调块只提供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(如果该信息甚至可用)?

4

1 回答 1

6

我认为我最初的问题是基于对 Faye 在两个方面的工作方式缺乏了解。我不会删除我的问题,而是将为遇到类似问题的其他人回答它。(如果我的回答有任何错误,请评论或编辑!)

首先,由于 Faye 在 Bayeux 协议方面的实现方式,任何时候都无法访问已连接的客户端。所有通信都是通过频道广播进行的,这意味着所有监听频道的连接都将收到正在发送的消息。

其次,我在问题中粘贴的代码涉及监控。我真正在寻找的是一个extension

为了根据我的原始问题实现身份验证,我需要传递所需的任何身份验证值(无论是 cookie 值、身份验证令牌等)作为message['ext']值的一部分(根据扩展页面上的示例)。然后,在服务器端,我需要监听/meta/handshake通道上的消息,在message['error']值的情况下设置为某个值。

于 2012-09-20T19:29:13.517 回答