我正在编写一个多人国际象棋游戏,并使用Pusher作为websocket服务器部分。
无论如何,如果我有一个用户列表,并且我选择其中任何一个并挑战它们,我该如何向这一个用户发送挑战?我知道我会使用客户端事件,如:
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)
但我看不到这样的事情。有任何想法吗?感谢。
答案 0 :(得分: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 :(得分:3)
我来自Pusher。正如Braden所说,您可以轻松地为每个用户创建一个频道。这比在事件名称中包含用户ID更有效,这意味着您使用无用的消息向每个人发送垃圾邮件。
这是我们希望进一步改进的领域,所以感谢您的反馈。
答案 2 :(得分:1)