XMPP 多人游戏 : should I store opponents as roster contacts?

标签 xmpp

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

我正在构建一个跨平台(网络、iOS 和 Xbox)的回合制棋盘游戏。每个玩家在任何特定时刻最多可以有 100 场不同的比赛——因此他们可以轻松地从一场没有比赛的比赛跳到有比赛的比赛。

游戏将设有一个大厅,其中显示您的事件游戏列表,以及该游戏的每个对手的姓名和在线状态(您最多可以有 3 个对手,每场比赛总共 4 个玩家)。

此外,每个玩家都有一个可从不同区域访问的 friend 列表,其中还列出了在线状态。

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

我使用 XMPP 解决的主要方面是:对手移动时的通知,查看我的 friend 在线状态,查看我的对手在线状态,以及游戏中的文本聊天。

所以这就是我开始遇到麻烦的地方:很明显,您的 friend 列表将成为您名册中的联系人,因此您可以看到他们的在线状态。但是对手呢?这些通常是随机的对手,你只会和他们打一场比赛,以后再也不会了——但你和他们的比赛可能会持续长达 2 周。

请记住,一切都在幕后进行(例如:自动订阅确认等)——最好的做法是在比赛进行时将每个对手添加到您名单中的另一个组中,然后在比赛结束后将其删除已经完成?这样当玩家在线时你会收到在线通知吗?或者这是可以使用 PubSub 的情况吗?

我也考虑过使用多用户聊天,所以我总是可以在没有订阅的情况下访问每个用户的在线状态,但是当在任何给定时刻都有多达 20k 的玩家在线时,这似乎远非有效。在移动设备上绝对听起来也很耗电。

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

最佳答案

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

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

关于XMPP 多人游戏 : should I store opponents as roster contacts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428210/

相关文章:

xmpp - Google Talk 如何跨设备复制消息?

java - GCM CCS 服务器实现未接收上游消息

使用 strophe js 的基于 Javascript 的 XMPP 聊天客户端 - 示例和教程?

java - 如何检索 IQ 响应

ios - openfire 中需要哪些插件才能进行聊天

java - 使用 Google App Engine 群聊 XMPP

ios - Xmpp IOS 多用户聊天。我没有找到接受群组邀请的方法?我怎样才能接受传入的邀请

Android 无法在屏幕上显示所有图像?

android - 如何在 android 上使用 smack 获取 openfire xmpp 服务器上的所有用户?

xmpp - Ejabberd MucSub : When a member sends a presence unavailable, 服务没有响应