推送器应用程序客户端事件

4
我正在编写一个多人棋类游戏,并使用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)

但是我看不到任何类似的东西。有什么想法吗?谢谢。
3个回答

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() 命令是创建新套接字连接的代码,因此您不必担心每个通道或其他任何内容的额外套接字。希望这可以帮助你。


3
我来自Pusher。正如Braden所说,你可以轻松地为每个用户创建一个频道。这比将用户ID放在事件名称中更有效,因为这意味着你会向所有人发送无用的消息。
这是我们想进一步改进的领域,感谢您的反馈。

每个用户有不同的频道似乎很不错。你如何进一步改进它? - maletor

1
如果您考虑使用其他服务,Beaconpush 可以向特定用户发送消息。
以下是他们网站上的说明:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接