出于现实、实用和性能方面的原因,您将很难避免编写服务器:
许多住宅互联网连接位于限制接受来自网络外部的连接的防火墙(在 ISP、本地路由器或操作系统级别)之后。NAT 使在 LAN 上接受来自 Internet 的连接更加复杂。
很少有无服务器的 Internet 通信方法,以及那些需要使用本地对等点发现来查找对等点的方法。大多数 LPD 流量不会离开您的局域网,ISP 会对其进行过滤(否则您将能够“本地”发现整个互联网上的对等点)。
带宽可能是游戏的一个问题。并不是每个人都拥有高速互联网连接(尽管此时光纤和快速 DSL 的市场渗透率相当高),您最终会遇到将较慢主机连接到大型集群的问题。
服务器促进了非常高效的星型网络。存在其他网络拓扑,但许多都存在严重抑制其扩展能力的缺点。
例如,对于客户端,星型网络需要 O(connections) = O(1)、O(bandwidth) = O(1) 和 O(latency) = O(1)。
完全连接的网络要求每个客户端都连接到每个其他客户端,因此 O(connections) = O(bandwidth) = O(n) 和 O(latency) = O(1)。
在环形网络中,每个客户端连接到 2 个邻居并转发远距离客户端的消息。因此,它们有 O(connections) = O(1),但 O(bandwidth) = O(latency) = O(n)。
如果您只需要一个聊天系统,或者非常不想编写自己的服务器,而您愿意通过聊天服务器搭载整个在线体验,那么您可能会依赖 XMPP 服务器之类的东西。
如果您选择走这条路,请确保在必要时使用适当的身份验证和加密来保护用户的私人数据(密码等)。我建议使用允许客户端对其他客户端进行身份验证的加密身份验证方案(例如质询/响应方案或其他)。或者,您可以使用中央服务调解所有身份验证。
请记住,许多聊天服务不希望为您的项目提供免费带宽。即使您决定使用 XMPP 作为多人游戏协议的核心,也希望运行您自己的服务器。