2011-03-04 111 views
4

我正在編寫多人國際象棋遊戲,並使用Pusher作爲websocket服務器部分。無論如何,如果我有一個用戶列表,並且我選擇其中的任何一個並挑戰他們,我該如何向這個用戶發送挑戰?我知道我會使用類似的客戶端活動:Pusher應用程序客戶端事件

channel.trigger("client-challenge_member1", {some : "data"}); 

但是這個事件必須已經創建,我認爲。那麼我是否在每個成員訂閱後動態創建此事件?爲可能在:

channel.bind("pusher:subscribed_completed", function(member) // not sure of correct syntax but... 
{ 
    channel.bind("client-challenge_" + member.memberID, function(data) 
    { 
     alert(data.Name + " is challenging you."); 
    }); 
}); 

我認爲有會是一個重載的方法trigger,如:

channel.trigger(eventName, data, memberID) 

,但我看不出這樣的事。有任何想法嗎?謝謝。

回答

8

我在我的應用程序中遇到了這個問題。此時,Pusher不提供將事件發送給特定用戶的方法。我認爲你提到的方法適用於你的情況。對於我的應用程序,我讓每個用戶訂閱一個頻道,並將其用戶ID作爲頻道ID,然後我可以通過該頻道向單個用戶發送消息。

client = new Pusher(PUSHER_API_KEY); 
channel = client.subscribe(user_id); 
channel.bind('my_event',function(data){ 
    //Do stuff 
}); 

我和推車團隊討論了這種方法,他們向我保證,有額外的渠道沒有真正的開銷。 new Pusher()命令是創建一個新的套接字連接的代碼,因此您不必擔心每個通道或類似的附加套接字。希望這可以幫助。

1

如果您能夠考慮其他服務,Beaconpush能夠將消息發送給特定用戶。

從他們的網站:

POST /1.0.0/[API key]/users/[user]

3

我是從推我。正如Braden所說,您可以輕鬆地爲每個用戶創建一個頻道。這比在事件名稱中使用用戶標識更有效,這意味着您用無用的消息向每個人發送垃圾郵件。

這是我們想進一步改進的地方,所以謝謝您的反饋。

+0

每個用戶的不同頻道看起來不錯。你怎麼能改進呢? – maletor 2013-07-25 23:48:37