游戏服务器架构和web服务器架构的区别?

很多页游(手游)的后端也是用PHP,java直接架构,那这些页游(手游)的后端架构和一般网站的架构区别是什么? 以下几个角度阐述: 1-技术有什么区别…
关注者
242
被浏览
61,254
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

以前做WEB服务器,最近在研究游戏服务器,试着回答一下吧。不对的地方请各位斧正一下。

1-技术有什么区别

首先通信上目前的主流是HTTP协议和SOCKET这两种(HTML5提供了一种新的协议,WebScoket,对此了解并不多,因此不做评论,以免误导)。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
(注:在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。)

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。(摘自百科)

在WEB服务器中,一般情况是只需要使用HTTP协议的。因为它不太需要去与浏览器进行主动推送,只需要响应浏览器的访问就足够了

而在游戏服务器,这样的连接方式肯定是不够用的。很多时候游戏服务器是需要主动推送消息,如系统广播。

2-思维有什么区别

WEB服务器并不需要高频即时通讯,对响应速度要求不高。而游戏服务器,大多数是需要很及时的响应速度(暂不讨论弱联网游戏)。如DOTA,这种竞技类型的游戏,1秒就能发生很多事。

因此,在思考方向上,WEB服务器应该考虑是的多平台的兼容,大量用户访问的高并发。

而游戏服务器应该考虑的是高频通讯,高并发。

3-架构的侧重点有什么区别

在架构上面,一般访问量不是很大的网站是只有一台服务器的,访问量高的才会进行分布式设计或者集群设计。

而大部分游戏服务器都是需要分布式设计的。

在现有的网络游戏服务器端架构中,多是以功能和场景来划分服务器结构的。具体的划分是根据项目的需求进行的,并没有一个十分通用的架构。

以上是比较常见的结构,客户端登录的时候,连接GateServer,然后由GateServer去连接LoginServer进行登录。登录后通过CenterServer转发到GameServer(GameServer即是服务器大区)。

而其中的DCServer,主要的功能是缓存玩家角色数据,保证角色数据能快速的读取和保存。

LogServer便是保存日志的了。

4-本质有无区别

本质上,两者并无区别,只是需求不同,侧重点不同罢了。

大致就是这样,有错误地方希望能指出来。

=========================================================

一年过去了。感觉,我又强了几分。

再来补充点好了,也当作是一个自我总结。

个人感觉上,游戏和web服务器之间最大的区别就是业务上的不同。游戏的业务大多数都是很复杂的情况,而且对即时性要求比较高(部分弱联网游戏对即时性要求不高,抛开业务甚至可以直接照搬web服务器架构)。

数据的同步:

在大型游戏上,有一个很重要的话题便是数据的同步。任何即时操作的游戏都绕不开这个话题,数据的同步直接影响着用户的体验。我们既要保证数据的一致性,又要保证玩家游戏的流畅性。这其中是需要做许多取舍的。

/*目前数据的同步主要有两种,帧同步与状态同步(各有优劣,应用环境不同,在此不展开)。这两种同步都只是一个大的方向,并不是一个完善的解决方案。比如帧同步在弱网络环境下是否需要冗余保证数据完整性,比如是使用tcp还是udp,亦或者是两者混合使用。这些都没有一个确切的答案,都处于摸索之中。*/

而web服务器并无此种纠结,它们的数据都在服务器,并不需要用户与用户之间的强交互。数据同步的延迟也就不那么难以忍受了。

集群与分布式:

当一个网站访问人数很庞大的情况下,单独去提升一台物理机配置能够带来的性能提升会因为边际效应逐渐减小。这时候就需要考虑使用集群了。集群有三种,高可用集群, 负载均衡集群,科学计算集群。其中最常见的便是负载均衡。很多情况下,集群之间是不需要互相交互的,数据都在单个服务器上进行处理,也就没了同步的问题(相比游戏服务器要简单了多)。

相对于游戏的难点就在于游戏我们可以通过分区分服甚至分频道等方式来减小服务器负载压力。而网站是无法这样让用户分区之类的操作。甚至是需要,全国各地乃至全球各地访问到这个网站都是同样的用户数据(针对这种情况我们会使用cdn,部署网络各地的节点服务器可以使得不同地方的人员访问网站的速度是一致流畅的)。所以并不是网站业务简单就轻率的认为网站开发没有技术含量。

游戏服务器,因为可以分区分频道等,所以很多情况下一台服务器的负载量要求不会太高。像手游的服务器,甚至要求可以低至同时在线200人。而且有些时候我们仅需要提高某一些功能的负载量,又或者大型3D游戏存在地图,这些情况下,我们往往使用分布式架构来解决。如分离聊天、好友之类的功能,如给每个区域分配一个单独的房间/地图/场景服务器。

======================

现在来看,觉得最大的差异在于web多数是无状态服务器,而游戏服务器多数是有状态的。

之前说的高频低频问题,web也是存在高频,如淘宝,如春节的12306.

req/resp模式的卡牌类服务器其实和web差不多。

而如那些有地图的游戏是会记录每个玩家的状态,地图服务器还会在服务器内运行一个类似客户端的地图处理逻辑。

如同客户端,服务器也存在一个刷新频率。不过一般比客户端的帧率低很多。大多数服务器是用单线程轮询,也有一些多线程,目前了解也不是很多。无法具体的表述。

等再研究一下mmorpg服务器再来更新吧