太空团队如何运作?

Posted

技术标签:

【中文标题】太空团队如何运作?【英文标题】:How Does Spaceteam Work? 【发布时间】:2013-02-04 21:50:57 【问题描述】:

对于那些不知情的人,Spaceteam 是一款非常流行且非常有趣的 ios 多人游戏。

它允许在 ad-hoc Wifi 网络上的多个设备之间进行实时游戏 - 它是如何做到的?

是否有已发布的库描述如何在 ad-hoc 网络库之上构建协议?是 iOS 特有的,还是可以跨不同平台构建各种应用程序?

快点,在我们撞上小行星之前回答!

【问题讨论】:

它肯定不是特定于操作系统的。网络以这样一种方式分层,即所有设备都使用相同的基本协议。例如,所有设备都有一个 IP 地址,它们可以用来相互通话。 这个游戏有没有可能使用alljoyn api 运行? alljoyn.org Spaceteam 开发人员写了a blog post detailing the game's networking。 【参考方案1】:

您具体对哪个方面感兴趣?移动设备或 ad hoc Wi-Fi 网络没有什么特别之处(除了在 ad hoc 网络中,并非所有设备都可以相互通信,因此有些网状网络可以提供帮助,但不必要地使正常情况下的问题复杂化)。

我将首先回答更广泛的问题,因为它更有趣。根据我的经验,有几个主要考虑因素:

服务器/客户端还是点对点?我的意思是是否有一个“主人”决定世界的真实状态并将其传达给所有客户端。 Avara 是我所知道的唯一一款从这个意义上说是“点对点”的游戏(点对点发送命令给所有其他点;这证明对于 6 人游戏的调制解调器用户来说带宽很重)。我不知道使用更复杂的网络拓扑来传达游戏状态的游戏(例如,仅向每个 LAN 上的一个客户端发送数据)。 您如何处理延迟问题?据我所知,为了获得一致的世界状态,Avara 是唯一一款通过“延迟容忍度”在本地延迟每个人的游戏,如果有人在调制解调器上,那就太糟糕了(关闭压缩有很大帮助)。有多种方法可以进行“延迟补偿”(例如,在 Half-Life/CS 中),其中一些也适用于点对点游戏。 时间同步? 对于客户端-服务器游戏,您至少需要担心 RTT 的变化。对于点对点游戏,我认为您还希望就最大程度地减少有效延迟的时间达成一致。 如果客户不同意世界的状态怎么办?Avara 只是让对等方决定他们自己的世界状态(如果它感觉到不匹配,则显示“检测到现实碎片”,这可能是由于掉线而发生的数据包或太低的“延迟容限”)。 如果玩家离开怎么办?对于 P2P 游戏,您可能必须就一致的游戏状态达成一致(例如,如果玩家在向其他同伴的子集发送命令后断开连接)。对于客户端-服务器游戏,您可能必须选择新的主人。

现在,在观看 Spaceteam 预告片之后:

我不知道它是如何工作的,因为我没有对协议进行逆向工程。但是,制作出效果足够好的东西非常简单:

使用某种 P2P 发现来寻找玩家(例如 Bonjour;那里应该有大量的文档和示例)。 与同行交流。我已经使用 iOS 3/4 左右的 GameKit 完成了这项工作(我不确定它是否仍然可以通过 Wi-Fi 工作)。 选择一个主人。这可以像 按下“准备”最后一次尝试成为主人的人一样简单。在某些极端情况下,您可能必须处理失败。 让主人决定一切。 Spaceteam 对延迟敏感; Wi-Fi 延迟往往最多只有几毫秒,没有人会真正注意到一台设备是否慢了 100 毫秒(只要 UI 响应足够快)。

【讨论】:

此评论可能会很晚,但是您有关于无缝蓝牙集成如何工作的任何信息吗? Spaceteam 不需要任何类型的配对,这是一种很好的做事方式。【参考方案2】:

Spaceteam 为 Unity 游戏创建了一个库。 https://github.com/hengineer/CaptainsMess

Spaceteam 的创建者还写了一篇关于 Spaceteam 网络的旧博客文章 http://spaceteamadmirals.club/blog/the-spaceteam-networking-post/


有一个 iOS 专用库,可以轻松连接附近的设备,称为 MultipeerConnectivity https://developer.apple.com/documentation/multipeerconnectivity


如果您想要跨平台工作的东西,我在这里有一个示例应用程序:https://github.com/brendaninnis/LocalNetworkingApp,我在这里详细解释:http://brendaninnis.ca/connect-nearby-devices-part-1.html

【讨论】:

以上是关于太空团队如何运作?的主要内容,如果未能解决你的问题,请参考以下文章

markdown 一个运作良好的高性能敏捷团队的症状

陈松松:团队化运作视频营销人员配置和工作细节

项目经理每天都在干啥?如何运作好一个项目?

Devops实践:运作模式

一个发誓不用Java的程序员,不得不在太空中调试Lisp

一个发誓不用Java的程序员,不得不在太空中调试Lisp