如何获得客户ID的Faye客户?

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(如果该信息甚至可用)?

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

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

其次,我在问题中粘贴的代码涉及监控 。 我真正想要的是扩展 。

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