我正在开发游戏,正在考虑进入网络。我从事编程工作已有大约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:
http://electronics.howstuffworks.com/mmorpg6.htm
https://zh.wikipedia.org/wiki/Server_%28computing%29
https://zh.wikipedia.org/wiki/游戏服务器
https://www.quora.com/How-do-I-create-an-MMORPG
_提示-如果您通过创建网络游戏感兴趣,则必须进行大量研究,我不能真的回答这个问题,因为这不是主题的目的。
这个主题太大了,无法在每个问题上写下新的答案…哪个软件可以编写游戏程序?如何建立一个套接字?从哪里开始?但是我已经回答了一些类似的问题。即使编程语言有时有所不同,我也会为您提供链接,但逻辑总是相同的,因此可以为您提供帮助
我正在制作一个本地比赛的MMORPG游戏,我已经开始在服务器上工作,我遇到的问题是,我想要一种方法来检测每个玩家看到的其他玩家,这样我就可以将他们周围玩家的信息发送给特定的玩家。 首先,我想到了将一个2d圆形对象附加到玩家对象上,并对数据结构中的每个玩家进行碰撞检查,但这将非常耗费性能,有合适的算法吗?请帮帮我!
我正在开发一个MMO射击游戏,类似于Python 2.7中的疯狂之神游戏。 游戏的玩家数据将包括每个玩家佩戴的装备、玩家姓名等。因此,当他们注销角色时,他们的玩家数据将被永久保存和保存,当他们再次登录时,他们的玩家数据将被加载到游戏中。为了安全起见,我估计唯一玩家数据条目的数量将为100万个条目。 将所有球员数据存储在一个巨大的txt文件中,或者26个文件,或者26*26个文件中,效率会更高吗?排
需要使用到内存进行排序,但是短时间内排序又会导致内存益处
我们正在开发一个基于Blokus游戏的Java小游戏。Blokus手册 我是Java初学者,计划实现一个高级人工智能。我们已经有了一个随机AI(选择一个随机有效的移动)和一个带有简单移动评级机制的AI。我们也想要一个尽可能好的人工智能(或者至少非常好;) ). 问题是:哪种AI概念适合我们的目的?最小轴算法似乎是一个有效的选择,但你如何将其适应4人游戏?像blokus这样的游戏有更好的概念吗? 已
你好,我正在编写一个2D游戏,我已经找到了几种计算每秒帧数的方法,但我还没有真正理解架构规则,其中之一是: 我无法理解的是,渲染屏幕需要一些时间,所以我应该将这部分放在循环的绝对末端(在渲染获得输入等(绝对末端)之后): 所以基本上在游戏循环开始时,我得到开始时钟,然后我运行每个函数,例如移动碰撞渲染等,然后我评估增量时钟并在此基础上计算fps?有很多fps计算“公式”,但我需要一个真正的程序架构
用户勾选某一个分类,一次性查询该分类里的所有商品信息,并创建价格任务。 业务员在价格操作的时候,对刚才创建的所有商品信息进行价格操作,根据基准价做涨幅,每个商品都有不同的基准价,现在的问题就是数据量太大,如果一次性操作一万条商品数据,还要根据基准价做涨幅,有什么好的方法?前端如果展示的话,每条商品的涨幅后价格都要显示,请问该怎么操作比较好,后端这边应该怎么进行处理大批量的数据?