MMO如何处理真人游戏的每一刻为成千上万的玩家计算和发送数据包?

Meeesh

我正在开发游戏,正在考虑进入网络。我从事编程工作已有5年之久,最近2年从事游戏开发。我只在自己的时间里真正地在线学习和学习书籍。我打算为Amazon AWS EC2创建一个Java服务器,但是我只是想知道MMO如何在每次滴答时处理多个玩家。

仅仅是服务器的强大功能吗?我不是在寻找代码或任何东西,只是在一般情况下服务器是如何工作的。

服务器是否只是对所有播放器以及成千上万个对象进行所有计算,然后每个滴答发送和接收数千个数据包?一台计算机可以处理很多东西,但实际上它是一台服务器。

提尔兹

服务器的工作方式是什么?

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

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

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

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

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

  • 因此,服务器是在线游戏的主要部分。

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

但是,服务器必须坚固!不像客户端,因为他不需要大型GPU,但是他需要大量的RAM / CPU(取决于游戏),并且还需要保持冷静

实际上,由于UDP协议并且程序的所有繁重部分都在客户端,因此游戏服务器能够处理大量连接您可以在这里看一下:用python创建多人游戏,并在我解释UDP和TCP协议之间的区别时阅读该部分。

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

现在我们可以尝试构建服务器!

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

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

  • 从计算机启动他,并允许他从防火墙输入连接。

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

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

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

您的计算机具有三个IP:

  • 回送地址:localhost,127.0.0.0(“ 0”可以更改)

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

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

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

如果创建服务器,但没有从调制解调器转发端口,则仍然可以使用回送地址访问本地服务器,而连接到同一调制解调器的其他计算机也可以使用Intranet地址访问服务器。另外,如果您需要测试服务器是否可以从Internet访问,则必须测试与Internet IP的连接,但是某些调制解调器不允许来自Intranet的外部连接...因此,如果您与Internet IP的连接不起作用,请尝试从另一个调制解调器(朋友的PC,Cyber​​-Coffee ...)将您登录到服务器。

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

这确实很困难,并且您无法创建完美的安全性……尤其是如果您遵循我的建议,但没有通过自己的研究完成我的知识。

  • 根访问权限

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

  • 防火墙功能

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

  • 更新

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

  • 越少越好

不要在服务器上安装许多无用的软件。如果未为服务器导入软件,则不应安装该软件,因为:首先,这可能是病毒。其次,恶意软件可以利用此软件安装病毒或窃取root访问权限。

  • 加密

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

  • 防病毒?

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

  • 拥有一个好的服务器

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

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

提示-如果您通过创建网络游戏感兴趣,则必须进行大量研究,我不能真的回答这个问题,因为这不是主题的目的。这个主题太大了,无法在每个问题上写下新的答案...哪个软件用于编程游戏?如何建立一个套接字?从哪里开始?但是我已经回答了一些类似的问题。即使编程语言有时有所不同,我也会为您提供链接,但逻辑总是相同的,因此可以为您提供帮助:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何渲染成千上万的元素?

来自分类Dev

播种成千上万的种子

来自分类Dev

当成千上万的条目时,如何加快数据库查询的速度

来自分类Dev

专业人士如何处理成千上万,甚至数百万个JSON对象?node.js

来自分类Dev

如何格式化浮点数,以成千上万的点,逗号和逗号分隔?

来自分类Dev

Azure通知中心发送成千上万的通知,并从每个通知中获取结果

来自分类Dev

批处理或Bash删除成千上万个文件中的时间戳

来自分类Dev

使用mutate和ifelse语句将k和M转换为成千上万

来自分类Dev

以词法顺序查找成千上万个合计为给定数字的组

来自分类Dev

复制成千上万个文件后检查数据完整性

来自分类Dev

使用head和fgrep查找成千上万的正确日志文件

来自分类Dev

使用Deepstream List获得成千上万的唯一值

来自分类Dev

使用Deepstream List获得成千上万的唯一值

来自分类Dev

使用Deepstream List获得成千上万的唯一值

来自分类Dev

如何在不杀死FPS的情况下绘制成千上万的瓷砖

来自分类Dev

当Elasticsearch中存在成千上万个相同文档时如何构建查询

来自分类Dev

如何使用成千上万的不同组分隔符。甲骨文

来自分类Dev

如何在不破坏FPS的情况下绘制成千上万的瓷砖

来自分类Dev

我们可以在一个文档中存储成千上万的数据而在mongoDb中没有任何性能问题吗?

来自分类Dev

在成千上万的mongodb文档中进行计算的最有效方法是什么?

来自分类Dev

对于具有成千上万个数据块的文件,我如何扫描每个块以检查其是否包含X行数?

来自分类Dev

当有成千上万种情况时,如何从字母表中选择*仅返回一行?

来自分类Dev

使用PHP(或查询)在MySQL数据库中成千上万行使用的常用单词

来自分类Dev

正则表达式:如何用逗号分隔成千上万个数字?

来自分类Dev

使用成千上万的分隔符打印整数

来自分类Dev

按列快速连接成千上万个文件

来自分类Dev

使用成千上万的子句在Clojure中进行cond

来自分类Dev

找出其中有成千上万的数量

来自分类Dev

HTML5输入模式,允许逗号分隔成千上万

Related 相关文章

  1. 1

    如何渲染成千上万的元素?

  2. 2

    播种成千上万的种子

  3. 3

    当成千上万的条目时,如何加快数据库查询的速度

  4. 4

    专业人士如何处理成千上万,甚至数百万个JSON对象?node.js

  5. 5

    如何格式化浮点数,以成千上万的点,逗号和逗号分隔?

  6. 6

    Azure通知中心发送成千上万的通知,并从每个通知中获取结果

  7. 7

    批处理或Bash删除成千上万个文件中的时间戳

  8. 8

    使用mutate和ifelse语句将k和M转换为成千上万

  9. 9

    以词法顺序查找成千上万个合计为给定数字的组

  10. 10

    复制成千上万个文件后检查数据完整性

  11. 11

    使用head和fgrep查找成千上万的正确日志文件

  12. 12

    使用Deepstream List获得成千上万的唯一值

  13. 13

    使用Deepstream List获得成千上万的唯一值

  14. 14

    使用Deepstream List获得成千上万的唯一值

  15. 15

    如何在不杀死FPS的情况下绘制成千上万的瓷砖

  16. 16

    当Elasticsearch中存在成千上万个相同文档时如何构建查询

  17. 17

    如何使用成千上万的不同组分隔符。甲骨文

  18. 18

    如何在不破坏FPS的情况下绘制成千上万的瓷砖

  19. 19

    我们可以在一个文档中存储成千上万的数据而在mongoDb中没有任何性能问题吗?

  20. 20

    在成千上万的mongodb文档中进行计算的最有效方法是什么?

  21. 21

    对于具有成千上万个数据块的文件,我如何扫描每个块以检查其是否包含X行数?

  22. 22

    当有成千上万种情况时,如何从字母表中选择*仅返回一行?

  23. 23

    使用PHP(或查询)在MySQL数据库中成千上万行使用的常用单词

  24. 24

    正则表达式:如何用逗号分隔成千上万个数字?

  25. 25

    使用成千上万的分隔符打印整数

  26. 26

    按列快速连接成千上万个文件

  27. 27

    使用成千上万的子句在Clojure中进行cond

  28. 28

    找出其中有成千上万的数量

  29. 29

    HTML5输入模式,允许逗号分隔成千上万

热门标签

归档