2012-09-18 79 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']設置爲某個值。