2012-09-18 47 views
2

Faye允许您监视各种事件,例如handshakesubscribe。这些回调块仅提供client_id值,而不是客户端本身。例如:如何获得给予客户ID的Faye客户?

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

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

如何访问给定client_id的客户端?或者如何在握手过程中访问更多信息,例如请求头中提供的cookie(如果该信息甚至可用)?

回答

6

我认为我的原始问题是基于对菲耶如何在两方面的工作缺乏理解。与其删除我的问题,我会为其他遇到类似问题的人解答。 (如果我的回答有任何错误,请发表评论或编辑!)

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

其次,我在问题中粘贴的代码涉及monitoring。我真正想要的是extension

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