简单的多人游戏网络,无需专用服务器或需要玩家手动转发端口(无 UPnP)

Posted

技术标签:

【中文标题】简单的多人游戏网络,无需专用服务器或需要玩家手动转发端口(无 UPnP)【英文标题】:Simple multiplayer game network without dedicated servers or requiring players to forward ports manually (No UPnP) 【发布时间】:2016-03-05 19:31:45 【问题描述】:

我正试图弄清楚如何制作一个简单的多人游戏,让玩家不必担心端口转发,并且可以直接相互连接而无需中间的专用服务器。手动端口转发对于不太懂技术的玩家来说是一件麻烦事,而且服务器要花钱。

我研究过 UDP 打孔,但这需要客户端之间的中间人,据我了解,UPnP 存在安全问题,并非所有设备都支持。

除了我提到的以外,还有其他方法吗?也许是我可能忽略的 TCP 或 UDP 以外的方法?我希望玩家体验尽可能简单,而不必自己担心服务器成本。

提前致谢

【问题讨论】:

搜索 UPnP(通用即插即用),虽然不是每个人都在他们的路由器上启用它 - 它允许您为拥有它的人按需进行端口转发。 UPnP 不受完全支持,已知存在安全问题。如果没有这些点,这将是一个理想的解决方案。 我目前不知道有任何其他方法可以做到这一点,但无论如何 UPnP 都很常见。很多人在不知情的情况下默认启用了路由器上的 UPnP。更多精通技术的人可能会禁用它,但如果他们知道如何做到这一点,那么他们显然知道如何手动转发他们的端口。 UPnP 的安全问题在于路由器,而不是您的应用程序 - 这意味着您使用它不会使安全性变得更糟。如果用户使用的是 UPnP,这不是你的问题,但如果它可用,那么继续使用它。 【参考方案1】:

您实施的任何解决方案都可能具有与 UPnP 相同的安全隐患。普通家庭路由器使用的 NAT 基本上是一种绕过 ISP 对多个 IP 地址收费的技巧。由于大多数家庭用户没有运行服务器,这已经相当不错了。但正如您所发现的,它不允许在不跳过一些障碍的情况下举办游戏。我的建议是实施 UPnP 并记录您为路由器缺乏支持的用户使用的端口。

【讨论】:

大多数现代路由器都支持 UPnP 吗?如果只有一小部分玩家(如 1-5%)缺乏支持,我会考虑采用这种方法,并为那些没有支持的人详细说明解决方法。此外,如果现在越来越多的路由器支持 UPnP,那么将来可能会完全支持它。 老实说,现在不确定大多数家用路由器是否支持它。好久没用家用路由器了。然而,当我这样做时,它逐渐变得越来越普遍。 你不能相信用户在他们的路由器上安装 UPnP-IGD。 @Drgnkght 关于安全性是正确的:当您想要做的正是 UPnP-IGD 所做的事情时,关心 UPnP 安全问题是愚蠢的:使其他计算机可以连接到受“保护”的计算机NAT。

以上是关于简单的多人游戏网络,无需专用服务器或需要玩家手动转发端口(无 UPnP)的主要内容,如果未能解决你的问题,请参考以下文章

快节奏多人在线游戏网络入门系列教程:实体插值

实时多人游戏或回合制多人游戏 API? [关闭]

《Python多人游戏项目实战》第一节 简单的方块移动

Google Play 多人游戏:与其他玩家没有连接

网络多人游戏架构与编程

多人iOS游戏