

星期二, 1月 14, 2025
4.1 原来的定时器调度机制 * 简单的轮询遍历式定时器: * 在线程循环中,每隔一定的时间间隔,调用一次OnTimer * 在OnTimer中按照管理器、对象、对象的成员等逐层遍历所有OnTimer void ThreadProcess() { while (true): { // do some


星期三, 1月 10, 2024
原有日志接口的问题 * 写日志耗时高 * 实时写入文件单行 LOG,耗时约 0.25ms(1KB 以内的 LOG 长度并不会显著的影响写入文件的耗时,固态硬盘和机械硬盘也没有显著的差异) * * 异常时日志丢失 * 缓存型日志,单文件 4K 缓存,可以极大的减少写入文件的开销,但是宕机时,可能导致文


星期二, 5月 2, 2023
英文原文:https://www.incredibuild.com/blog/the-ultimate-guide-to-cpp-code-review-part-2 在第一部分中,我们花了一些时间讨论代码审查的广泛方面。本部分将专注于 C++,提供一个代码审查清单并提供一些最佳实践。你可以按任意顺


星期日, 4月 2, 2023
传统死循环问题检测排查的困境 游戏服务端开发维护过程中,经常会碰到死循环或者游服性能问题,此类问题一般存在本机或者QA内部环境极难重现,难以定位和排查的问题。一般能采用的方式,只有: 1. 静态代码审查 2. 在可能出问题或者可能耗时较多的代码部分添加LOG,然后经过测试后上线观察,再加LOG,再观


星期日, 4月 2, 2023
从六月份开始开发账号服务器到今天,账号服务器的大体功能也算完善了,账号服务器的开发暂时告一段落,预计下周又回去开发游戏服务端了。 一直想写一篇文章总结一下账号服务器开发过程的经验和教训,迟迟没有时间动笔,今天正好借这个机会写一下。虽然不是什么高大上的东西,但是我们的项目还在运营,另外也有商业秘密的原


星期日, 4月 2, 2023
自学过Lua好多次,每次都因为长时间没用然后忘记了。这次决定做一下笔记,一方面加深印象,另一方面为了下次忘记能够快速“捡回来”做准备。 参考教程:菜鸟教程之Lua教程 参考手册:Lua5.3参考手册 斜体部分为我个人的理解,可能不一定正确,只是帮助记忆。 [TOC] 注释 单行注释 --是单行注释:


星期日, 4月 2, 2023
RakNet开源免费了,接下来准备学习一下,计划把RakNet的文档做个翻译。就从手册开始吧。原文链接。 介绍 手册最后更新时间 2012-11-19。 查看readme.txt文件获取当前版本号。 RakNet是为游戏或者其他高性能网络应用设计的一套高性能的网络API。 RakNet致力于提供现代


星期日, 4月 2, 2023
相关资料 1. 导航网格开源库:RecastNavgation 2. 一个基于C#的AI库,包含UNITY 3D插件:CAINav 3. 开源服务端框架:kbengine 4. WOW服务端模拟器:TrinityCore RecastNavgation是业界比较知名的导航网格生成和寻路的开源库了,大


星期日, 4月 2, 2023
回合制战斗的页游,需要将战斗过程在服务端全部计算完成后再下发给客户端,并且还需要将战斗过程保存起来,让第三方直接查看。 将战斗的过程以动作为单位分解成多种消息,之后将多种战斗消息封装在一个消息打包器中下发给客户端。客户端从打包消息中按字节流的方式还原 出战斗消息,再解析消息进行表现。保存战斗过程只需


星期日, 4月 2, 2023
* 账服需要守护程序,原来的守护程序使用的一对一的方式,技术部希望我们能提供一对多的守护程序,这样他们可以不用区分哪个程序守护哪个账服,多开时比较方便。 * 原来的守护进程的做法是先启动守护进程,然后守护进程通过CreateProcess启动账服程序,然后调用WaitForSingleObject挂


星期日, 4月 2, 2023
服务器框架 备选资源 1. NavMesh 2. 3D碰撞检测 3. 网络通信 * 连接协议 * RakNet * ENet * libuv * 消息协议: * ProtoBuf * MsgPack * BitStream:RakNet集成 网络通信协议的选择 * 结论:由于客户端最后选择了UNIT


星期日, 4月 2, 2023
其他项目的做法 * 方案 1. 将场景用八叉树划分,最多三层 2. 物体根据坐标直接加入八叉树的叶节点(忽略了体积和包围盒) 3. 移动采用完全相信客户端的做法 4. 通过MoveState来记录移动过程,客户端上传开始位置、结束位置、持续时间信息,服务器根据开始位置和结束位置、以及时间计算出速度。
