`

QQ游戏百万人同时在线服务器架构实现

阅读更多

QQ游戏百万人同时在线服务器架构实现

作者:sodme
网址:http://blog.csdn.net/sodme/archive/2004/12/12/213995.aspx

 

QQ游戏于前几日终于突破了百万人同时在线的关口,向着更为远大的目标迈进,这让其它众多传统的棋牌休闲游戏平台黯然失色,相比之下,联众似乎已经根本不 是QQ的对手,因为QQ除了这100万的游戏在线人数外,它还拥有3亿多的注册量(当然很多是重复注册的)以及QQ聊天软件900万的同时在线率,我们已 经可以预见未来由QQ构建起来的强大棋牌休闲游戏帝国。


  那么,在技术上,QQ游戏到底是如何实现百万人同时在线并保持游戏高效率的呢?
  事实上,针对于任何单一的网络
服务器 程 序,其可承受的同时连接数目是有理论峰值的,通过C++中对TSocket的定义类型:word,我们可以判定这个连接理论峰值是65535,也就是说, 你的单个服务器程序,最多可以承受6万多的用户同时连接。但是,在实际应用中,能达到一万人的同时连接并能保证正常的数据交换已经是很不容易了,通常这个 值都在2000到5000之间,据说QQ的单台服务器同时连接数目也就是在这个值这间。
  如果要实现2000到5000用户的单服务器同时在线,是不难的。在windows下,比较成熟的技术是采用IOCP -- 完成端口。与完成端口相关的资料在网上和CSDN论坛里有很多,感兴趣的朋友可以自己搜索一下。只要运用得当,一个完成端口服务器是完全可以达到2K到 5K的同时在线量的。但,5K这样的数值离百万这样的数值实在相差太大了,所以,百万人的同时在线是单台服务器肯定无法实现的。
  要实现百万人 同时在线,首先要实现一个比较完善的完成端口服务器模型,这个模型要求至少可以承载2K到5K的同时在线率(当然,如果你MONEY多,你也可以只开发出 最多允许100人在线的服务器)。在构建好了基本的完成端口服务器之后,就是有关服务器组的架构设计了。之所以说这是一个服务器组,是因为它绝不仅仅只是 一台服务器,也绝不仅仅是只有一种类型的服务器。
  简单地说,实现百万人同时在线的服务器模型应该是:登陆服务器+大厅服务器+房间服务器。当然,也可以是其它的模型,但其基本的思想是一样的。下面,我将逐一介绍这三类服务器的各自作用。
   登陆服务器:一般情况下,我们会向玩家开放若干个公开的登陆服务器,就如QQ登陆时让你选择的从哪个QQ游戏服务器登陆一样,QQ登陆时让玩家选择的六 个服务器入口实际上就是登陆服务器。登陆服务器主要完成负载平衡的作用。详细点说就是,在登陆服务器的背后,有N个大厅服务器,登陆服务器只是用于为当前 的客户端连接选择其下一步应该连接到哪个大厅服务器,当登陆服务器为当前的客户端连接选择了一个合适的大厅服务器后,客户端开始根据登陆服务器提供的信息 连接到相应的大厅上去,同时客户端断开与登陆服务器的连接,为其他玩家客户端连接登陆服务器腾出套接字资源。在设计登陆服务器时,至少应该有以下功能:N 个大厅服务器的每一个大厅服务器都要与所有的登陆服务器保持连接,并实时地把本大厅服务器当前的同时在线人数通知给各个登陆服务器,这其中包括:用户进入 时的同时在线人数增加信息以及用户退出时的同时在线人数减少信息。这里的各个大厅服务器同时在线人数信息就是登陆服务器为客户端选择某个大厅让其登陆的依 据。举例来说,玩家A通过登陆服务器1连接到登陆服务器,登陆服务器开始为当前玩家在众多的大厅服务器中根据哪一个大厅服务器人数比较少来选择一个大厅, 同时把这个大厅的连接IP和端口发给客户端,客户端收到这个IP和端口信息后,根据这个信息连接到此大厅,同时,客户端断开与登陆服务器之间的连接,这便 是用户登陆过程中,在登陆服务器这一块的处理流程。
  大厅服务器:大厅服务器,是普通玩家看不到的服务器,它的连接IP和端口信息是登陆服务器 通知给客户端的。也就是说,在QQ游戏的本地文件中,具体的大厅服务器连接IP和端口信息是没有保存的。大厅服务器的主要作用是向玩家发送游戏房间列表信 息,这些信息包括:每个游戏房间的类型,名称,在线人数,连接地址以及其它如游戏帮助文件URL的信息。从界面上看的话,大厅服务器就是我们输入用户名和 密码并校验通过后进入的游戏房间列表界面。大厅服务器,主要有以下功能:一是向当前玩家广播各个游戏房间在线人数信息;二是提供游戏的版本以及下载地址信 息;三是提供各个游戏房间服务器的连接IP和端口信息;四是提供游戏帮助的URL信息;五是提供其它游戏辅助功能。但在这众多的功能中,有一点是最为核心 的,即:为玩家提供进入具体的游戏房间的通道,让玩家顺利进入其欲进入的游戏房间。玩家根据各个游戏房间在线人数,判定自己进入哪一个房间,然后双击服务 器列表中的某个游戏房间后玩家开始进入游戏房间服务器。
  游戏房间服务器:游戏房间服务器,具体地说就是如“斗地主1”,“斗地主2”这样的游 戏房间。游戏房间服务器才是具体的负责执行游戏相关逻辑的服务器。这样的游戏逻辑分为两大类:一类是通用的游戏房间逻辑,如:进入房间,离开房间,进入桌 子,离开桌子以及在房间内说话等;第二类是游戏桌子逻辑,这个就是各种不同类型游戏的主要区别之处了,比如斗地主中的叫地主或不叫地主的逻辑等,当然,游 戏桌子逻辑里也包括有通用的各个游戏里都存在的游戏逻辑,比如在桌子内说话等。总之,游戏房间服务器才是真正负责执行游戏具体逻辑的服务器。
   这里提到的三类服务器,我均采用的是完成端口模型,每个服务器最多连接数目是5000人,但是,我在游戏房间服务器上作了逻辑层的限定,最多只允许300 人同时在线。其他两个服务器仍然允许最多5000人的同时在线。如果按照这样的结构来设计,那么要实现百万人的同时在线就应该是这样:首先是大 厅,1000000/5000=200。也就是说,至少要200台大厅服务器,但通常情况下,考虑到实际使用时服务器的处理能力和负载情况,应该至少准备 250台左右的大厅服务器程序。另外,具体的各种类型的游戏房间服务器需要多少,就要根据当前玩各种类型游戏的玩家数目分别计算了,比如斗地主最多是十万 人同时在线,每台服务器最多允许300人同时在线,那么需要的斗地主服务器数目就应该不少于:100000/300=333,准备得充分一点,就要准备 350台斗地主服务器。
  除正常的玩家连接外,还要考虑到:
  对于登陆服务器,会有250台大厅服务器连接到每个登陆服务器上,这是始终都要保持的连接;
  而对于大厅服务器而言,如果仅仅有斗地主这一类的服务器,就要有350多个连接与各个大厅服务器始终保持着。所以从这一点看,我的结构在某些方面还存在着需要改进的地方,但核心思想是:尽快地提供用户登陆的速度,尽可能方便地让玩家进入游戏中。

分享到:
评论

相关推荐

    游戏服务器的架构.zip

    游戏服务器架构是游戏开发中的核心组成部分,它负责处理玩家交互、游戏逻辑、网络通信以及数据存储等一系列关键任务。一个高效且稳定的游戏服务器架构对于提供流畅的游戏体验至关重要。下面将详细探讨游戏服务器架构...

    网络游戏服务器架构设计

    网络游戏服务器架构是指为了支撑大规模在线游戏的稳定运行所采用的技术体系结构。一个合理的服务器架构不仅可以提高游戏性能,还能确保游戏的可扩展性和稳定性。本文将重点探讨网络游戏服务器的不同架构类型及其优劣...

    网络游戏服务器架构设计.doc

    网络游戏服务器开发架构的过程以及需要注意的点,可以更加有利于初学者避免掉进坑,对游戏服务器有进一步的了解

    类似qq游戏大厅的源码

    【标题】"类似QQ游戏大厅的源码"指的是一个开发项目,其目标是创建一个与腾讯QQ游戏大厅类似的在线游戏平台。这样的系统通常包括用户登录、身份验证、游戏选择和游戏服务器对接等功能。 【描述】中提到的关键点是...

    仿QQ游戏大厅的联机五子棋

    【标题】"仿QQ游戏大厅的联机五子棋"是一个基于C/S(客户端/服务器)架构的在线游戏项目,其目标是复制QQ游戏大厅的五子棋对战功能,让玩家可以实现实时的多人在线对弈。这个项目的核心在于运用了Java编程语言的关键...

    联机五子棋游戏大厅(仿QQ游戏)

    本项目“联机五子棋游戏大厅(仿QQ游戏)”就是这样一个尝试,它利用了Java的Socket通信、多线程以及Swing图形用户界面等技术,打造了一个C/S架构的在线游戏平台。本文将深入探讨这些技术在该项目中的应用及其重要性。...

    腾信-架构-QQGame后台架构

    腾信公司运营的QQGame是全球最大的休闲游戏平台之一,拥有超过3亿2千万的用户量和400万人的高峰同时在线人数。这个平台拥有比魔兽世界更出色的系统架构,它的成功不仅仅在于用户规模,还在于其强大的后台架构设计与...

    仿QQ游戏大厅原理demo

    QQ游戏大厅是一款深受用户喜爱的在线游戏平台,它集成了多款游戏,提供方便的一站式游戏体验。在这个“仿QQ游戏大厅原理demo”中,我们将探讨如何构建类似的应用,特别是针对Android平台的关键技术和实现步骤。 一...

    仿照QQ游戏大厅写的一个大厅

    3. **服务器架构**:QQ游戏大厅的服务器可能采用了分布式架构,通过负载均衡技术分散流量,保证在高并发情况下仍能提供流畅的服务。此外,可能会有专门的游戏服务器和数据库服务器,以分离计算密集型任务和数据存储...

    C#仿真QQ游戏火拼俄罗斯源码

    本文将深入探讨一款用C#语言开发的仿真QQ游戏火拼俄罗斯源码,基于TCP/IP协议,实现了多人在线同时对战的功能。 首先,我们要理解C#作为编程语言在游戏开发中的优势。C#是Microsoft推出的一种面向对象的编程语言,...

    腾讯游戏平台架构历程.pdf

    《QQ幻想》采用了分层的架构设计,主要包括Cluster(大区)、World(服务器)、ZoneGroup(线路)和Zone(区域)等层级。这种层次化的架构有助于管理和扩展,同时也便于负载均衡和故障隔离。 ##### 公测阶段的问题...

    QQ全民闯关后台架构.zip

    QQ全民闯关是一款深受用户喜爱的在线互动游戏,其后台架构是支撑整个游戏稳定运行的核心。这个压缩包“QQ全民闯关后台架构.zip”包含了关于这款游戏后台设计的详细资料,特别是其中的“QQ全民闯关后台架构.pdf”,将...

    在线游戏编程

    在线游戏编程是一个复杂而引人入胜的领域,它涵盖了网络编程、服务器编程以及游戏综合开发等多个关键知识点。本文将围绕这些主题展开深入探讨。 首先,我们要了解的是“在线游戏”。在线游戏,尤其是多人在线游戏...

    Java网络围棋游戏源码含大厅,仿QQ游戏

    标题 "Java网络围棋游戏源码含大厅,仿QQ游戏" 提供了我们即将探讨的核心内容:这是一个使用Java语言开发的在线围棋游戏项目,它包含了大厅功能,并且在设计上模仿了QQ游戏的风格。这个项目可能对那些想要学习游戏...

    QQ全民闯关后台架构.pdf

    - **系统挑战**:面对亿级用户入口、时间紧迫的开发周期、百万级同时在线的用户量以及对系统稳定性的极高要求。 - **架构设计**:系统包括音视频对齐、手Q消息推送、答题逻辑服务、奖励结算服务、复活卡服务、音...

    基于VC服务器代码

    在计算机科学与信息技术领域,游戏服务器的开发是一项复杂而有趣的任务。本篇将深入探讨如何利用Microsoft的Visual C++(VC++)和MFC(Microsoft Foundation Classes)框架来创建一个用于局域网内的五子棋游戏服务器...

    网络游戏-APP及其登录网络接入点方法、服务器及系统.zip

    登录网络接入点方法是指用户如何连接到游戏服务器进行身份验证和游戏数据交换。这通常包括用户名和密码认证、社交账号登录(如微信、QQ)、甚至是生物识别技术(如指纹或面部识别)。接入点的设计需要考虑安全性、...

    erlang游戏服务器网关源码.zip

    开发者可以通过研究这些源码,学习如何在Erlang中构建复杂的游戏服务架构,理解如何处理网络通信、错误恢复、以及应用的生命周期管理。对于想要深入理解Erlang在游戏服务器开发中的应用,这个源码包是一个很好的学习...

    棋牌游戏(家乡玩法)

    总的来说,“家乡棋牌游戏”通过使用完成端口模型,实现了高性能的服务器架构,同时借鉴了QQ斗地主的成功模式,为玩家提供了有趣且可靠的在线游戏体验。这样的项目不仅锻炼了开发者在多线程编程、网络通信、游戏逻辑...

    71丨命令模式:如何利用命令模式实现一个手游后端架构?1

    使用命令模式来实现第二种架构,可以创建一系列命令对象,每个对象对应一种特定的游戏操作。当服务器接收到客户端请求时,可以将请求转化为相应的命令对象,然后在单线程中顺序执行这些命令。这样,不仅可以方便地...

Global site tag (gtag.js) - Google Analytics