2011-03-04 151 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