XMPP多人游戏:我应该将对手存储为名册联系人吗?

时间:2011-06-21 15:48:43

标签: xmpp

我已经阅读了所有484页的专业XMPP并阅读了关于名单+ XMPP的无数论坛帖子,这个问题仍然是我正在努力解决的问题。我正在寻找有关最佳实践的见解,所以我至少知道要进入哪个方向。

我正在构建一个跨平台(web,iOS& Xbox),回合制棋盘游戏。每个玩家在任何特定时刻都可以有多达100个不同的比赛 - 所以他们可以很容易地跳过一个不会转到一个比赛的游戏。

游戏将以大厅为特色,显示您的活动游戏列表,以及该游戏的每个对手的名称和在线状态(您最多可以有3个对手,每个游戏总共4个玩家)。

此外,每个玩家都有一个可以从不同区域访问的朋友列表,该列表也列出了在线状态。

我在幕后使用XMPP,对玩家完全透明,没有人会用Jabber客户端或任何类型的东西登录。我完全可以控制信息的显示和利用方式。

我使用XMPP解决的主要方面是:当对手采取行动时的通知,看到我的朋友在线状态,看到我的对手在线状态,以及游戏中的文字聊天。

所以这就是我开始遇到麻烦的地方:显然你的朋友列表将是你名单中的联系人,所以你可以看到他们的在线状态。但是对手呢?这些通常是随机对手,你只会与他们进行一场比赛而且再也不会 - 但你与他们的比赛可能持续长达2周。

请记住,一切都在幕后(例如:自动订阅确认等) - 最好的做法是在游戏进行过程中将每个对手添加到名单中的另一个组,然后将其删除比赛结束后?这样,当该播放器在线时,您会收到在线通知?或者这是否可以使用PubSub?

我还考虑过使用多用户聊天,所以我总是可以在没有订阅的情况下访问每个用户的在线状态,但是在任何特定时刻可能有多达2万名玩家在线时,这似乎远没有效率。绝对听起来像移动设备上的电池猪。

我的另一个解决方案是使用共享名单。为每个游戏创建一个名单,并将该列表分配给每个玩家。然后在游戏完成后删除共享名单列表。

3 个答案:

答案 0 :(得分:3)

我会在这里选择Pubsub。当然,这意味着你也必须做一些服务器端工作。

向对手发送directed presence。这将使他们能够看到你的存在。

答案 1 :(得分:2)

我会考虑为每个游戏使用多用户聊天,以及你自己的MUC协议扩展来处理游戏状态消息(对手已经采取行动)。用户可以在“全球”级别拥有他们的朋友名单,但仍然可以使用MUC级别与他们的对手(并接收在场)进行通信(除非他们决定将他们添加为朋友)。

另请参阅:Advantages of Pubsub versus MUC

答案 2 :(得分:0)

我同意在这种情况下使用MUCS(即时)会更好。如果你需要清理不需要的订阅者的pubsub节点,那肯定是痛苦的。