我正在开发游戏,正在考虑进入网络。我从事编程工作已有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] 删除。
我来说两句