`
kayo
  • 浏览: 560673 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

QQ游戏服务器集群设计

阅读更多

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多个连接与各个大厅服务器始终保持着。所以从这一点看,我的结构在某些方面还存在着需要改进的地方,但核心思想是:尽快地提供用户登陆的速度,尽可能方便地让玩家进入游戏中。

评论

相关推荐

    类似qq游戏大厅的源码

    登录成功后,用户会被导向游戏服务器,这可能涉及到TCP/IP通信协议、Socket编程,以及游戏服务器的架构设计,如分布式服务器集群以应对大量并发用户。 在游戏大厅中,用户可以浏览各种游戏并选择参与,这就需要一个...

    多用户在线游戏服务器端框架 Marauroa.7z

    Marauroa是一款开源的Java框架,其设计目标是简化多玩家游戏服务器的构建过程,提供可扩展性和灵活性,以便开发者能够专注于游戏逻辑的实现,而不是底层网络通信和并发控制。这一框架的核心理念在于模块化和事件驱动...

    redis教程及主从配置和集群搭建

    这使得在多台服务器之间共享用户会话成为可能,从而实现负载均衡和高可用性。 3. **消息队列**:Redis 支持 List 数据结构,可以实现简单的消息队列服务。这对于实现异步处理、事件驱动架构等非常有用。 4. **...

    QQ西游服务端主程序

    GateWayD.exe 是网关服务器的调试版,作为游戏服务器集群的入口,处理客户端的连接请求,转发数据包到相应的服务器,起到负载均衡和安全防护的作用。 最后,LogServerD.exe 是日志服务器的调试版,用于收集、分析和...

    GameProject3:游戏服务器框架,网络层分别使用socketAPI,Boost Asio,Libuv这种方式实现,框架内部使用共享内存,无锁堆栈,对象池,内存池来提高服务器性能。还包含一个不断完善的Unity 3D客户端,客户端含大量完整资源,坐骑,宠物,伙伴,装备,这些均己实现上阵和穿戴,直接进入副本战斗,多人玩法也己实现,持续开发中

    跨平台的多进程游戏服务器框架,网络层分别使用SocketApi,Boost Asio,Libuv这种方式实现,框架内部使用共享内存,无锁集群,对象池,内存池来提高服务器性能。 还有一个不断完善的Unityy3D客户端,游戏包含大量...

    仿QQ聊天软件

    完全开源的交互聊天软件 ,仿QQ版增加了服务器互联的功能,增加了服务器互连的功能,同时去掉了服务器集群的功能 增加了群组的功能,包括聊天室和游戏大厅 ,增加了一个网络五子棋游戏,改正了在有些网络环境下,每5...

    qq农场源码

    7. **服务器架构**:对于大量并发用户,游戏服务器需要设计成高可用、可扩展的架构,可能包含负载均衡、分布式缓存、数据库集群等技术。 8. **实时性**:农场状态的实时更新需要实时通信技术,可能使用WebSocket...

    qq即时聊天系统

    - **分布式服务器**:由于用户量庞大,QQ服务器通常采用分布式集群,分散负载,确保系统的稳定性和高可用性。 2. **消息传输**: - **实时推送**:为了实现实时聊天,QQ采用消息推送技术,一旦有新消息,服务器会...

    山寨版qq源码+素材

    10. **分布式系统**:QQ背后的服务器集群是一个庞大的分布式系统,涉及负载分发、故障恢复、数据一致性等问题。 11. **移动平台适配**:QQ不仅有桌面版本,还有移动端应用,因此源码可能包含针对不同平台的适配代码...

    基于QQ的软件体系结构剖析.zip

    QQ还提供了游戏、音乐、新闻、支付等多元化服务,这些功能的实现依赖于各种插件和API接口,体现了QQ的可扩展性和集成性。 总结,QQ的软件体系结构充分体现了高效、稳定、安全的设计原则,通过精细的模块划分和合理...

    类似QQ的开发(server端)C++源代码

    7. **负载均衡与集群**:对于大型的即时通讯系统,可能需要考虑负载均衡和服务器集群,以应对高并发和故障恢复。这涉及网络负载均衡技术、分布式系统原理等。 8. **性能优化**:为了提供低延迟、高吞吐的服务,需要...

    moyu account server

    "moyu account server" 是一个专用于游戏账号管理的服务器程序,可能是一个网络游戏或手机游戏后端的重要组成部分。在游戏行业中,账号服务器通常负责玩家账号的创建、登录验证、权限管理、数据存储以及与游戏逻辑...

    P2P聊天工具原来QQ是这个原理

    服务器集群和负载均衡策略可以确保高可用性和性能。 7. **社交功能集成**:QQ不仅仅是一个聊天工具,还包括空间、游戏、群聊等多种社交功能。这些功能的实现需要后端数据库、缓存技术、消息队列等支持,以处理大量...

    QQ聊天系统` `````````

    此外,服务器集群管理用户信息、消息存储和分发,确保高效稳定的运行。 其次,QQ系统具有用户账户管理和身份验证机制。每个用户都有一个独特的账号,通过密码验证登录。这涉及到数据库管理和安全加密技术,如哈希...

    红月3.94服务端【Redmoon 3944 】

    5. **服务器架构**:根据玩家数量和负载情况,可能需要采用集群、负载均衡等技术来保证服务的稳定运行。 在“Redmoon 3944 v2.1”中,开发者可能针对上述方面进行了优化,确保游戏在新的操作系统环境下依然能够顺畅...

    分布式websocket解决方案

    分布式WebSocket解决方案的目标是实现WebSocket连接在多台服务器间的无缝迁移,保证在服务器集群中,用户的WebSocket连接不会因为服务器故障或负载均衡而中断。这通常涉及到负载均衡、会话持久化、消息广播等多个...

    ea2c35a839c8e85191a2691f2bc038.rar

    10. **服务器架构**:对于网络游戏,服务器架构设计也很重要,可能包括负载均衡、分布式存储、数据库集群等,以应对大量玩家同时在线的情况。 以上只是《幻想西游》源码可能涉及的一部分技术点,实际的源码中可能...

    聊天室工具

    这里可能还会用到分布式系统的设计,将服务器集群化,通过负载均衡技术分散压力。 在开发环境中,如【MYEclipse】,它是一个集成开发环境(IDE),特别适合Java开发。MYEclipse提供了丰富的功能,如代码编辑、调试...

    带宽与访问量的计算方式

    相反,20万并发对于任何单一服务器来说都是巨大的压力,可能需要一个大规模的服务器集群来支撑。 网络游戏的情况类似,即使是声称有“20万同时在线人数”的游戏,也需要大量的服务器资源来处理并发的交互请求。例如...

    QQl聊天系统

    2. **服务器架构**:为了处理大量并发用户,QQ聊天室的后端服务器可能采用了分布式集群架构,通过负载均衡技术将用户请求分散到多台服务器,确保系统的稳定性和可扩展性。 3. **数据库管理**:用户的聊天记录、好友...

Global site tag (gtag.js) - Google Analytics