对于真人游戏,MMO 将如何处理每次为数千名玩家计算和发送数据包的问题?

Mee*_*esh 2 java sockets network-programming multiplayer serversocket

我正在开发一款游戏,并正在考虑进入网络领域。我从事编程工作已有大约 5 年,最近 2 年开始从事游戏开发。我只是利用自己的时间在网上和书本上真正学习。我计划为 Amazon AWS EC2 制作一个 java 服务器,但我只是想知道 MMO 如何处理每个时间点的多个玩家。

这仅仅是服务器的力量吗?我不是在寻找代码或任何东西,只是在寻找服务器的一般工作方式。

服务器是否只对所有玩家和数万或数十万个对象进行所有计算,然后在每个周期发送和接收数千个数据包?对于一台计算机来说似乎要处理很多事情,但它确实是一台服务器。

小智 5

服务器是如何工作的以及它的工作是什么?

  • 您的服务器创建一个套接字并打开一个端口。

  • 在线游戏的协议通常采用 UDP,因为它速度更快。

  • 您的服务器必须处理所有客户端连接。

  • 您可以添加一个能够登录帐户的服务器并将其重定向到游戏服务器(所有大型 MMO 都是如此)。

  • 你的服务器必须管理数据库中的所有计算:当一个敌人击中另一个敌人时,在你买一些东西时减去你的一部分钱......

  • 所以服务器是网络游戏的主要部分。

事实上,计算机做一些计算的速度确实很快,现代视频游戏最重要的部分是物理和图形......幸运的是,这两部分都在客户端部分。

但是,服务器一定要强大!不像客户端,因为他不需要大的 GPU,但他需要大量的 RAM/CPU(取决于游戏),而且他还需要保持冷静

事实上,由于 UDP 协议以及程序的所有重要部分都在客户端,游戏服务器能够处理大量连接。你可以看看这里:Creating a Multiplayer game in python并阅读我解释 UDP 和 TCP 协议之间的区别时的部分。

All the others informations about how work an MMO server are linked at the end of this topic.

现在我们可以尝试搭建一个服务器了!

首先,你知道如何创建服务器吗?

  • 编程或下载服务器以进行测试(例如:TeamSpeak 或 Mumble)。

  • 从您的计算机启动他并允许他从防火墙进行输入连接。

  • 登录调制解调器并将服务器端口转发/重定向到您的计算机。

对于最后一部分,您需要做一些研究:我的服务器使用哪个端口以及如何使用我的调制解调器转发端口(每个调制解调器都不同)。

现在您可以尝试登录到您的服务器。但...!

您的计算机有三个 IP:

  • Loopback地址:localhost,127.0.0.0(“0”可以改变)

  • 内网地址(连接到您计算机的IP):192.168.0.0、172.16.0.0、10.0.0.0

  • 互联网地址(链接到调制解调器的 IP):0.0.0.0

如何知道您的内网/互联网IP?这取决于您的操作系统和调制解调器。对于 Intranet,请使用您的终端并写入“ifconfig”或“ipconfig”。对于您的互联网地址,有时会在您登录调制解调器时写入,或者您必须访问能够显示您的 IP 的网站。

如果您创建服务器并且没有从调制解调器转发端口,您仍然可以使用 Loopback 地址在本地访问您的服务器,并且连接到同一调制解调器的其他计算机也可以使用内网地址访问该服务器。另外,如果您需要测试您的服务器是否可以从互联网访问,您必须测试与您的互联网IP的连接,但某些调制解调器不允许来自内联网的外部连接...所以如果您与互联网IP的连接不起作用,请尝试从另一个调制解调器(朋友的电脑、Cyber​​-Coffee...)登录到您的服务器。

最后,如何保护您的服务器?

这确实很困难,您无法创建完美的安全性......特别是如果您遵循我的建议,但您没有通过自己的研究来完善我的知识。

  • 根访问权限

这是最重要的部分。当 Lamer 尝试访问您的服务器时,他可以尝试简单的连接,例如 http/ssh/ftp。如果他可以访问您的硬盘并且您没有选择严格的限制,那么他可以简单地读取/修改/删除您游戏的数据库。数据库包含有关帐户的所有信息。

  • 防火墙

我们已经讨论了服务器必须处理的连接/计算量。在某些攻击中,lamer 尝试创建大量连接并且没有关闭它们。我们称之为 DOS(1 台计算机)或 DDOS(1 台以上计算机)。因此,您需要一个好的防火墙来:仅允许您的服务器的端口,仅允许来自唯一 IP 的 X 个连接,并且每分钟仅允许 X 个新连接。

  • 更新

这是最简单的部分:使您的操作系统(和其他应用程序)保持最新。

  • 越少越好

不要在你的服务器上安装很多无用的软件。如果某个软件不是您的服务器导入的,您不应该安装它,因为:首先,它可能是病毒。其次,恶意软件可以利用该软件安装病毒或窃取根访问权限。

  • 加密

加密对于阻止黑客非常重要。例如,使用 https 协议,您可以保护用户的密码免受 MITM 攻击。通过 Bluefish/SHA/其他,您可以加密您的数据库以保护她,即使黑客可以读取它。最重要的是始终阻止黑客的写入/修改/删除/执行权限(事实上,您游戏的所有客户端都需要读取权限)。

  • 防病毒?

对于在线游戏来说,防病毒软件并不是很重要(但仍然建议所有操作系统,Linux/Unix 也使用)。

  • 有一个好的服务器

如果您的服务器在编程时没有考虑安全性,那么您可能会遇到麻烦。示例:C/C++ 中的缓冲区溢出攻击。

If you need more informations about how work an MMO, I recommend you:

提示 - 如果您对创建在线游戏感兴趣,则必须做很多研究,我无法真正回答这个问题,因为这不是该主题的目的。这个主题太大了,无法为每个问题写一个新答案......使用哪种软件来编写游戏?如何构建套接字?从哪里开始?但我已经回答过一些类似的问题了。即使编程语言有时不同,我给你链接,逻辑总是相同的,所以它也许可以帮助你: