/*
QQ: 2#4#2#1#0#6#7#6#4 #表示为空
Mail: lin_style#foxmail.com #替换成@
*/
核心,我的并行思路
整体拓扑图
代码执行模块层次
核心,我的并行思路
21:31 2009-12-18
昨晚睡觉的时候,又仔细的考虑了下采取的整个框架模型。前提是要充分利用多核和分布。
方法一:把整个游戏看成一个场景,多线程+锁的肆意执行。想都不用想,代价何其巨大和复杂,抛弃
方法二:为了解决这种异步,加入一个任务队列,并且指定一个线程只能执行几个场景。也就是网络收包还是共同的,场景执行分开了。这样的瓶颈是任务队列需要网络线程、场景执行线程的资源竞争;并且还需要维护一个场景和玩家的关系表,同时可能造成空取。即取得的包不是自己所属的场景。
方法三:既然方法二已经把场景执行线程分开,那何不把网络的连接也分开呢?具体方法如下:
先给若干个场景编号指定好逻辑线程,接着再分配一个网络接包线程,把这个看成是一个完整的游戏服务端。在N核的机器上/不同的机器上,你可以启动N个这样的完整程序,分别指定好不同的场景编号,亲缘到各自的CPU数上。这样就成了一个完整的游戏世界。(也就是吧CPU切成单核单核的应用)然后你要维护的就是,当玩家进行场景切换时,如果场景不在当前的服务端里,改怎么进行跳转,这也就是此次要解决的分布式难题
那么登录模块也可以这么做。一个CPU对应着一个bin,该bin包括一个完成端口的线程(为了防止阻塞等意外可以多个),一个逻辑处理线程,然后一个已经连接的套接字队列。那么,你就得为客户端单独配置一个登陆接口的文件,指定好IP和各个端口。当然,这件事可以交给更新服务器去做。
2009-12-24
今天又机会看了下big world的引擎结构图。发现主体的架构是差不多的。让我兴奋了一把。但是big world的邮局数据转移,让我大开了眼界,毕竟以前都是自个瞎琢磨。
在我的结构里,最麻烦的就是场景切换时不在一个线程里的数据转移。而BW得做法是,在服务端和客户端的中间设置一排中间服务器,专门用来用户数据的海量转发。这样就不涉及到用户数据转移的问题。而且实现起来也确实直观,决定采用。
整体拓扑图
逐个介绍下每个部件的作用:
Login邮局分配:
非常关键的路由。它负责邮局服务器的监控,知道邮局的负载量;负责帮助客户端对邮局的寻址工作。客户端与邮局分配服务器采取的是UDP的连接。原因有二:
-
这是一个非常小的通讯交互,客户端发个请求,服务端发个回答,整个开销甚至低于一个TCP的建立
-
服务端寻址的时候非常的简单(事实也是如此,按我的方法仅仅只要一个随机和一个邮局服务器台数的循环量)。即时UDP的出错概率,在1秒内也能做到(1秒/包来回时间)的重试次数,更重要的是,UDP在高并发上有着无限的可能。
邮局服务器:
进行客户端和BIN之间的消息转发。
-
接受客户端的高并发连接
-
接受BIN的连接
-
主动向邮局分配服务器连接注册自己 ,理论上可以做到邮局服务器动态的增加
Bin1..Bin4:主程序:
你只要为他提供好场景编号,就可以像一个独立的游戏程序跑动。尽量将一些最即时的信息(比如打斗)放在这里面运算。
DPC:
用来控制非即时性的消息。比如物品的邮寄,聊天消息的转发,数据存储等。
代码执行模块层次
层次上分为网络层,队列层,和逻辑层。以及一个main的启动初始程序。
整个大致的工作流程就是:在接收方面,网络层收到数据后,统一放到队列里,然后由逻辑层解析,有结果返回时直接由逻辑层发送。
这样设计的原因有二:
-
接收的时候,是一个创建各种任务的抽象过程。自然,肯定有即时任务,非即时任务这样的各种任务属性。因此创建一个队列进行同步的转换是非常必要的。
-
发送的时候,我不进行一个队列的中间过渡,而是选择了交给逻辑层直接发送。虽然耦合度高了点,但是简单性和效率高了很多。首先,发送本身就是个即时的过程,没有优先级之分(起码在这个版本里没有);其次,发送的数据没有附加任何的事件属性,完全是个二进制流的级别,再经过一次队列的转换没什么必要。
分享到:
相关推荐
文档不仅提供了完整的功能介绍,还包含了实践中可能遇到的问题总结,为用户提供了一系列实践案例,以帮助开发者有效解决实际开发中遇到的问题。同时,文档还指导用户如何利用SD框架实现物联网中的自定义协议应用,...
热更新框架设计系列课程总体介绍: 本系列课程由《热更新框架设计之Xlua基础》、《热更新框架设计之热更流程与热补丁技术》、《热更新框架设计之游戏客户端框架》三套课程组成。 三套课程是一个不可分割有机的整体,...
热更新框架设计系列课程总体介绍: 本系列课程由《热更新框架设计之Xlua基础》、《热更新框架设计之热更流程与热补丁技术》、《热更新框架设计之游戏客户端框架》三套课程组成。 三套课程是一个不可分割有机的整体,...
文档的主要目的是为“一站到底”系列游戏软件的开发团队提供一个全面的蓝图,明确游戏的开发目标、技术规格和实施步骤,以确保项目的顺利进行。它旨在促进团队间的沟通,减少开发过程中的误解和冲突,提高开发效率。...
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统...
- **配置(Configuration)层**:根据硬件的不同特性,将一系列具有相似特性的设备划分为一个配置。配置层为这些设备定义了一个基本的硬件抽象层,以便于上层软件可以跨设备开发。 - **简表(Profiles)层**:简表层...
它提供了一系列工具和技术来帮助开发者构建视觉效果逼真、互动性强的游戏世界。一个典型的3D游戏引擎包括图形渲染、物理模拟、声音处理、脚本编写等功能。 **编程**是实现这些功能的核心技术之一。通过编程,开发者...
本项目是一个基于Spring Boot框架和MySQL数据库实现的游戏周边交易商城系统,旨在提供一个全面的线上交易平台,让玩家能够购买和出售游戏相关的商品,如角色装备、游戏货币、皮肤等。这个系统不仅适用于教学目的,...
MySQL因其软件体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 - **优势**:开源免费、易于使用、支持多种操作系统、安全性高、可...
Web框架是指用于帮助开发者快速构建Web应用程序的一系列工具和库。除了SpringBoot之外,还可以考虑使用其他流行的Web框架如Spring MVC、Struts等。这些框架能够提供丰富的功能,简化开发过程。 #### 四、系统需求...
- **具有多个角色的组件**:一个组件可以扮演不同的角色,这增加了组件的灵活性。 - **内置组件**:Seam 提供了一系列预定义的组件,可以直接使用,无需手动创建。 #### 五、Seam 组件配置 - **通过属性设置来配置...
- **快速开发**:提供了一系列的默认配置,大大减少了开发人员的配置工作量。 - **自动配置**:根据添加的依赖包自动配置Spring容器。 - **独立运行**:Spring Boot应用可以被打包成可执行的jar或war文件。 - **...
Web开发通常涉及到后端服务器、数据库及前端用户界面的交互设计,Python语言提供了一系列的框架和库来支持这些需求,如Django、Flask、Bottle等。 Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的...
总体而言,这个压缩包对于技术开发者来说,是一个宝贵的学习资源,能够提供深入了解网站开发与游戏开发的宝贵机会。它不仅包含了丰富的编程代码,还可能包括设计思路、架构解决方案和编程模式等。对于想要扩展知识、...
这款游戏显然是基于Web技术构建的,特别是使用了Vue.js框架,这是一个非常流行的轻量级JavaScript库,用于构建用户界面。Vue.js以其易学易用、组件化开发和高效的虚拟DOM著称。 在项目的初始化阶段,开发人员已经...
C#广泛应用于Windows桌面应用程序、Web应用、游戏开发(特别是Unity引擎)、服务器端开发等多个领域。 #### 第二版特点 《Head First C#》第二版是在第一版基础上进行了更新和完善,以适应C#语言的新版本和现代软件...
### Netty实现原理浅析 #### 一、总体结构概览 Netty是一个高性能的Java NIO框架,由JBoss出品。它不仅提供了一套完整的客户端和...无论是简单的HTTP服务器还是复杂的游戏服务器,Netty都能提供稳定且高性能的支持。
- **开发人员在所在机构购买网络设备/服务器硬件/存储设备/操作系统软件/开发工具/管理信息系统或其他平台应用/安全产品时主要负责的工作**:参与采购决策、技术选型、需求分析等环节。 #### 第二章 软件开发技术...
- **知识点**:ASP.NET 是基于.NET框架的一种服务器端脚本环境,在这种环境中可以使用多种编程语言编写代码,但并不是JavaScript。ASP.NET 使用的语言主要包括 C# 和 Visual Basic.NET。 ### 9. WPS与Word - **...
在IT行业中,Root通常指的是操作系统中的超级用户权限,而在这个特定的情境下,"root-tournaments"似乎是指一个与Leder Games的Root游戏相关的比赛记录系统。Root游戏可能是一款策略或桌面游戏,而"tournaments"则...