Java 网络 : Creating servers without static IPs

标签 java networking

我有一个用 Java 编写的小型原型(prototype)游戏,玩家可以在其中构建自己的关卡,然后将自己设置为服务器以邀请其他玩家进入他们的世界。总而言之,这是对网络世界的一个很好的介绍。

然而,对于最终产品,我一直在考虑扩展它,以便我可以拥有一个带有中央世界的中央服务器。这将允许玩家在中央游戏世界内见面,然后互相邀请进入他们自己的世界或其他任何地方。

理想情况下,当玩家进入另一个玩家的世界时,所有玩家都将有效地断开连接(可能来自通用聊天 channel 的除外),以便该组进入的世界的玩家成为其他玩家的新服务器。这种设置有望为游戏提供 MMO 的开放式连续性,同时也将我的服务器上的流量保持在最低水平,因为玩家将主要离开自己的区域。

我认为普通玩家很可能不会拥有静态 IP - 这是个问题吗?将一个客户端的连接信息传递给另一个客户端是否存在安全风险?在开始尝试此操作之前,我是否应该注意任何其他问题或不可能的情况?

最佳答案

有趣的想法,我研究了几个游戏项目的类似概念。

我看到三个大问题:

  • 难以在玩家之间建立 P2P 连接。您可能最好尝试采用现有的 P2P 网络工具并根据您的游戏对其进行调整,而不是从头开始编写一些东西,但无论哪种方式都会遇到挑战(动态 IP、防火墙等)。您也许可以使用类似 JXTA 的东西.
  • 无论谁被指定为服务器,都可以很容易地“作弊”,并且您将无法再控制服务器,因此阻止这种行为的方法有限。您必须确保最终为此做好计划 - 如果您的游戏足够流行,您可以保证一些玩家会尝试滥用它。
  • 确定谁加入每个游戏世界的机制 - 可能会变得非常复杂,例如断开连接时会发生什么?你如何确保玩家了解每个世界?他们需要同时加入吗?等等等等

这些都不是完全无法克服的,但要使其顺利运行将是一个挑战....

关于Java 网络 : Creating servers without static IPs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9390331/

相关文章:

rest - 在Golang中使HTTP请求非法路径

perl - 如何使用 IO::Select 阻止等待读取或写入套接字?

java - 如何使服务器向客户端提供较慢的下载(就像所有这些直接下载网站一样)

java - 在 PostgreSql 中处理 RFID 的最佳方式?

networking - Docker 接口(interface)在哪个 MAC 地址上连接互联网?

Angular 2 本地主机和后端服务器连接

c - TCP套接字: Server/Client code structure

java - 设置命令行 Java 错误日志?

java - 如何在 Spring 中拦截 RequestRejectedException?

Filechannel TransferTO 的 Java 文档规范