基于多线程的大容量MMORPG主逻辑服务器实现策略

用ESP32-CAM和点灯科技,5分钟搞定一个免开发的手机监控摄像头(附完整代码) 本文详细介绍了如何利用ESP32-CAM模块和点灯科技APP快速搭建免开发的家庭监控系统。通过Arduino环境配置、简单代码修改和APP设置,用户可在5分钟内实现手机实时视频监控,特别适合硬件爱好者、学生和家庭用户。方案支持远程访问、运动检测等进阶功能,是低成本智能家居的理想选择。 阅读详情

转载请标明出处:http://blog.youkuaiyun.com/herm_lib/article/details/9079309

 

实际参与的商业项目而且已运营的服务器,逻辑这块都是一个独立的单线程的,网络跑在其他线程中。像接入服务器,由于他自身的特点,可以尽量利用CPU,做到大负载接入。大部分商业服务器,包括网游服务器,瓶颈还是在于逻辑而非网络,所以接入服务器这块也没有必要的优化。

以前总结过接入服务器的优化的策略:游戏网关服务器性能优化的一种方案 http://blog.youkuaiyun.com/herm_lib/article/details/7085181

 

今天想到了大世界服务器,以前出于兴趣,基于多线程实现了一个逻辑服务器,当时印象比较深刻。但随着时间的推移和年纪增长记忆力衰退,发现当时实现策略已经不再清晰。重新翻了一下以前的代码,好好地回忆,赶快把自己的理解记录下来。

今天的话题说得直白点就是,类似WOW这样的游戏,如何能做到支持最大数量的同时在线呢?这类游戏大地图是一个公共的开放空间,而且玩家角色之间是相互可见的,须要控制视野。实现大型战场的话,可以考虑参考本文的方法。

 

今天的文章基于的前提条件

        服务器硬件足够强大,4CPU8核或者8CPU16核之类的。单台机器如果不够强,采用网络分布式的方案,理论上是不满足高即时的逻辑要求的。

 

要支持最大数量的同时在线,本质上就采用分布式策略。

一种方法是将地图分成多块,分配特定的线程为某块服务器。这个策略基本是不可行的,因为每一块的地图角色数量是不均衡的。除非,从设计角度强制每一块地图的人数有上限,这样就回到那种常见的小地图,跑两步就要传送到另外一个地图块模式中去了。

 

我这边采用的方法是,将不同的玩家角色分配给不同的线程,比如有角色R1 R2 R3, 线程 T1 T2 T3, T1跑R1逻辑,T2跑R2逻辑。。。。  线程分配方式,可以简单地为R1算个hash值,然后对应到哪个线程上。

这种方式在技术实现上,存在两个稍微麻烦一点的地方:

1. 线程互斥

2. 不同线程中的角色数据交互

第一种就是一种纯技术实现方案,我们要做到的是,多线程,但无须互斥。如果多线程,还要用各种锁,基本上玩家一多,线程一多,再多的CPU最后可能沦落到和一个CPU接近的负载。现在这个问题就归结到如何实现多线程不加锁了,基本上通过下面两点搞定:

       [1] 一生产者线程一消费者线程,通过Memroy Barrie可以不用加锁,Memory Barrier,大家搜索吧。

       [2] 多生产者多消费者,可以转换成[1]中的情形。

 

接下来说说第二个问题,角色间的数据交互,交互形式有两种,一种是线程内的,另外一个是线程间的。同一个线程内的两个或者多个角色数据交互,基本上是直接同步调用就行了。 线程间的有讲究,发展成类似服务器间的数据交互,从实现角度讲,可以认为和服务器间的数据交互是一样的,要做成异步的了。

就拿线程T1中的R1要获取T2中的R2的等级等信息,来说事,一般我们是获取角色基本信息,细节步骤如下:

       [1]  T1写 R1获取R2基本角色信息的请求消息(记为GET_ROLE_BASE_INFO_REQ),到 T2的线程队列;(R1就去做其他事情了啊。。。)

       [2]  T2取到   GET_ROLE_BASE_INFO_REQ,将 R2的 基本信息的回应消息(GET_ROLE_BASE_INFO_RES),写到T1的线程队列;

       [3]  T1读到T2的回应消息,通知给R1。

过程没有什么特别,和我们客户端和服务器,或者服务器之间的数据交互完全一样。 为了做到线程内和线程间的统一,线程内的角色间数据交互可以和线程间的方式统一起来。

 

上面的实现策略,在目前硬件条件下是可行的。有兴趣的兄弟可以实践一下,真正实践起来就有感觉了。 

 

 

游戏服务器之网络收发线程处理详细分析 业务网络收发线程的循环部分,处理网络数据的接收和发送。 设计上: (1)先检查所有连接是否处于正常状态。 (2)网络的处理是读优先的,有读才检查写,写的检查是一段时间检查一次(目前是50ms)。 实现上通过两个epoll描述符来处理。 第一个epoll描述符监听所有连接的读事件,并处理网络数据的接收。 第二个epoll描述符监听所有连接的写事件(顺带会检查读事件),并处理网络数据的 阅读详情

相关推荐

MaNGOS大芒果服务端源码研究(一)——环境安装与源码下载

此文章是我自己的学历历程记录,教学味道不强。我学到哪记到哪,是为了我自己的下次学习能够很快找到上次的点。 MaNGOS的一些介绍就不多说了,可以自行百度。其实就是一个大型的通用服务端,可以支持多种客户端接入。但其实我自己也还有些不懂,怎么实现的通用。一个模块针对的是魔兽世界的模块,如果用其他客户端接入,这样可以用么?有待继续研究。 一开始可以先上大芒果中国论坛,去把单机版的

姚老板的黑店 1万+

MMORPG大型游戏设计与开发(服务器 游戏场景 多线程)

多线程在随着cpu发展应用的是越来越多,游戏场景因为其在服务器所占的数据量与逻辑复杂度的原因必须依赖于它。为什么场景要采用多线程?场景的线程是怎样的?场景的线程又是如何创建的?场景的线程又是怎样管理的?在这里同时对可以指正错误的朋友们说声谢谢,虽然是小错误,也希望大家能够勇于纠正这些错误。 游戏截图 采用理由 上面的两张截图分别在不同的场景,试想一下如果一个线程只能先处...

weixin_30533797的博客 567

用ACE网络框架做的一个带有处理线程池的TCP服务器

这个可是master写的 里面有很多的注释 看起来就不不一样 这个服务器程序还是有多种策略 但是这里面是主要讲带线程池的 是不一个不错的框架应用

MMO 游戏中使用多核

MMO游戏中使用多核 如果游戏中一个会话中的玩家数量只有数十人则服务器开发还算容易。我们可以用单线程模式开发游戏服务器,之后根据CPU内核数量运行游戏服务器进程就可以简单实现 但MMO游戏就不同,一个会话中会有数千名玩家。此时如果游戏服务器为单线程模式则使用1个CPU内核就会达到性能...

chichun5974的博客 496

R语言的下载、安装及环境配置(Rstudio&VSCode)

R for Windows是一个免费的用于统计计算和统计制图的优秀工具,是R语言开发工具。它拥有数据存储和处理系统、数组运算工具(其向量、矩阵运算方面功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图等功能。提供的图形界面,可以在其中访问控制台、创建脚本或安装其他软件包。

zegeai的博客 2万+

【NLP】语言模型的发展历程 (1)

N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。

酒酿小圆子呀~ 1668

MMORPG性能优化之有限多线程模型

MMORPG的后台服务器架构经历了从早期的多进程设计到现代的微服务架构的演变。通过合理的架构设计、性能优化和安全措施,可以有效提升GameServer的性能和稳定性。随着技术的不断发展,未来的MMORPG将会更加智能化和高效化,为玩家提供更好的游戏体验。早期MMORPG游戏采用的多进程单线程架构在当时的技术条件下提供了良好的故障隔离和扩展性,但也面临内存冗余和异步逻辑复杂等问题。随着技术的进步,游戏服务器架构逐渐向微服务和多线程设计演变,以应对更高的并发需求和复杂的游戏逻辑。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 695

win11本地部署openclaw实操第1集

OpenClaw 是一款开源、本地优先、可自托管的 AI 智能体(AI Agent)网关 / 自动化框架,核心是让 AI 从 “只聊天、给建议” 变成 “能在你电脑上真做事” 的数字助手。

weixin_44626085的博客 7126

Mangos源码分析(7):服务器公共组件实现之游戏主循环

 当阅读一项工程的源码时,我们大概会选择从main函数开始,而当开始一项新的工程时,第一个写下的函数大多也是main。那我们就先来看看,游戏服务器代码实现中,main函数都做了些什么。  由于我在读技术文章时最不喜看到的就是大段大段的代码,特别是那些直接Ctrl+C再Ctrl+V后未做任何修改的代码,用句时髦的话说,一点技术含量都没有!所以在我们今后所要讨论的内容中,尽量会避免出现直接的代码,在有...

weixin_34378767的博客 266

华为昇腾 910B 实战:DeepSeek-R1 蒸馏模型高效部署与性能调优全解析

本文详细解析了在华为昇腾910B硬件平台上高效部署DeepSeek-R1蒸馏系列模型(14B/32B版本)的完整实战流程。内容涵盖从MindIE环境搭建、镜像获取、模型准备,到服务配置、内存参数调优、性能测试及常见问题排查,为开发者提供了基于昇腾910B进行大模型部署与优化的全链路指南。

weixin_28235513的博客 210

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 329

MMORPG大型游戏设计与开发(构架)

游戏整体是以经典的武侠世界/天龙八部作为基本的一种设计模式,大致分为以下几个部分。  游戏的简单的一次处理流程如下,不过有些凌乱,还有待完善。  程序设计方面,服务器基本上分为数据处理、日志、网络等模块,客户端分为UI、场景、动作等模块。客户端选择的开源引擎OGRE+CEGUI。 作者:viticm 出处: http://www.cnblogs.com/lianyue/本文版权归作者和博客园共有,

Sunface撩技术 6789

1998年高教社杯全国大学生数学建模竞赛 B 题:《灾情巡视路线》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 883

Mangos源码分析(15):游戏对象的实现

狭义的游戏对象是指游戏世界中所能看到及可交互的对象,如玩家、怪物、物品等,我们这里也主要讨论这类对象在服务器上的组织及实现。  在大部分的MMOG中,游戏对象的类型都大同小异,主要有物品、生物、玩家等。比如在wow中,通过服务器发下来的GUID我们可以了解到,游戏中有9大类对象,包括物品(Item)、背包(Container)、生物(Unit)、玩家(Player)、游戏对象(GameObject...

weixin_34081595的博客 467

[ATF]-smc指令详解

1、在ree/tee调用smc之前 2、调用smc之后,cpu触发同步异常,进入ATF的sync_exception_aarch64—>handle_sync_exception—>smc_handler64处理函数 在smc_handler64中又调用了smc_handler func smc_handler64 /* ---------------------------------------------- * Detect if this is a RUN_IMAGE or ot

baron-周贺贺-代码改变世界ctw 1万+

20、超声多普勒成像技术全解析

本文全面解析了超声多普勒成像技术,涵盖彩色血流成像(CFI)、能量多普勒成像、超快多普勒成像和矢量多普勒成像的原理、流程、优势及临床应用场景。详细探讨了各成像模式的特点,如CFI的血流方向与速度可视化、能量多普勒对小血管的高灵敏度、超快多普勒的高帧率分析能力,以及矢量多普勒消除角度依赖性的创新方法。同时分析了技术面临的挑战及未来发展趋势,包括更高分辨率、人工智能辅助诊断和便携式设备的发展,为医学影像研究和临床诊断提供重要参考。

z2a3b4c5d的博客 277

关于mangos多线程处理方式

关于mangos多线程处理方式由于目前的MANGOS只是针对个人单机用户<span class="t_tag" onclick="function onclick(){tagshow(event)}">制作的,并非真正的服务器版。使用的是单线程的处理方式。关于mangos多线程处理方式听说配置这个<span class="t_tag" onclick="fu

slmeng2002的专栏 1582

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

关于mmorpg游戏的压力测试

用配置文件即可表达发送的游戏协议json游戏协议二进制游戏协议用probuf的反射机制是否能解决?服务端进行记录log,方便调试 要求每一个客户端登录游戏只有一条唯一的log 每一个客户端退出游戏只有一条唯一的log 每次存盘都记录一条日志 每次加载数据都记录一条日志 日志内容 time,login_type,user_id,role_id,

epeaktop的专栏 2129

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【服务器端】逻辑梳理

SpringMVC+RESTful的使用 我们搭建后台服务的整体框架是SpringMVC,设计风格是RESTful,下面就来学学SpringMVC,RESTful @RestController注解与@RequestMapping注解 @RestController,作用于类上,用于声明这是一个Controller,也就是MVC中的C层 @RequestMapping("/home"),作用于类内具体方法上,对相应的URL请求进行映射 SpringMVC+RESTful的使用总结 SpringBoo

Tangli_yzy的博客 606

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

mangos新手教程 - 服务器配置文件中文说明

mangos新手教程 - 服务器配置文件中文说明2008-10-28 23:27# MaNGOS Configuration file 服务器配置文件中文说明ConfVersion=2007071001# RealmID must match the realmlist (国度ID 必牒凸 攘斜砝锩娴南喾?RealmID = 1# 0 NORMAL 1 PVP 4 NO

junhuo的专栏 9192

请教:多线程同时写socket是否需要加锁

第一种可以,因为Socket是双工的 多线程读写同一Socket的话基本上是会出问题的 想要不出问题的话,除非你的多个线程作用是一样的 在TCP/TP卷2中有这样的结构体 struct sockbuf{ short sb_flags; .......... }so_recv,so_snd; 其中flag 有这几种标志: SB_LOC

flymachine的专栏 2万+

服务器部署逻辑

一、服务器选择   服务器,也称伺服器,是提供计算服务的设备。现在可选择的服务器主要分为两种:物理服务器和云服务器。 1、物理服务器   物理服务器的构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。 CPU: 计算机的性能在很大程度上由CPU的性能决定,而CPU的性...

anmi3721的博客 322

mangos源码分析

参考:1、http://www.cppblog.com/ming81 mangos源码分析系列2、 http://hi.baidu.com/zyy503950958/blog/item/b92fbe87514e9c26c75cc36c.html mangos 源码阅读笔记,十分详细,框架流程分析的很清晰 3、http://blog.sina.com.cn/s/articlelist_1814283

liuxialong的专栏 5701

服务器逻辑开发心得

系统层面 通信协议一般是由服务器制定,有几个关键点: ①. 变量注明必须和可选字段(required or optional). ②. 协议注明请求,返回和推送时机,不要让其他协议阅读者猜测意图。 ③. 涉及枚举定义一定要专门定义,不要直接在协议里面注释标明。 日志: ①. 分类按照级别, debug, info, warn, error分文件夹存储. ②. 以小时为单位分文件存储, 每...

lewiskyo的专栏 668
上一篇: 记录 cocos2dx ios&android遇到的一些注意问题
下一篇: 引用计数的cocos2dx对象内存管理和直接new/delete box2d对象内存管理冲突的解决方法
herm_lib
博客等级 码龄16年 173粉丝 115原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值