搭建centos基础开发环境的一些考虑
或许会有疑问,只要项目工程预编译好二进制文件,checkout下来就能跑了,几乎不需要再给centos安装些什么环境!因为开发过程还可能需要ssh远程,设置账号权限,设置网络端口规则,崩溃调试和性能采集等。作为技术人员可以很轻松地完成这些工作,但实际情况是非技术人员也有可能要搭自己的本地运行环境,尽管提供了搭建文档,但对他们来讲处理这些并不容易。
考虑各个项目的代码框架各有差异。此处不会涉及广泛的内容,仅以C/C++游戏后端开发基于Window主机+centos客机的搭建模式,其中只安装了必备的一些工具,你可能需要根据项目框架的实际情况另行安装。
开发环境配置的基础认知:
搭建本地运行环境有很好的隔离作用。使用项目任务得以尽可能并行开发而互不干扰。技术同事有着各自的前端/后...
Click to read more ...
计算平均值,复杂度O(1)
公会对象按以下形式缓存了所有成员的最新等级iLevel,要求实时刷新公会成员的【平均等级】,成员最多200人。
tMemberMap =
{
[角色ID1} = {iLevel=1, sPlayerName="xxx", ... }
[角色ID2} = {iLevel=2, sPlayerName="xxx2", ... }
...
}
当成员加入或离开公会或角色升级,触发重刷平均等级,简单的做法是遍历tMemberMap计算出【等级总和】,后除以【成员人数】。
公会成员最多只有200人,这样的做法绝对不会有性能问题。但这里我想发散一下,如果是海量数据呢?或者没有缓存信息tMemberMap呢?
我分析了一下,还是依据公式【平均等级】=【等级总和】/【成...
Click to read more ...
排行榜-排序
以下是lua版本二分插入排序
-- lua实现
function binary_insert(list, value)
local left = 1
local right = #list
local mid = -1
while left <= right do
mid = math.floor((left + right)/2)
if list[i] == value then
left = mid
right = mid
break
elseif list[i] < value then
lef...
Click to read more ...
游戏开发纲领
鉴于各个项目开发的游戏类型、开发规模和组织结构等有所差异,下文总结了大部分项目开发会涉及到的纲领性总结。有些内容,不便于详细展开,有需要会另开文章介绍。
本人亲身经历其中大部分事项以及流程改进,少部分内容是个人见解并有待验证。
本人能力有限,半刻之间未能想全,此后一旦想起要点,会逐渐添加和完善,如有不对欢迎指正。
目录
框架开发
网络数据
网络延时
本地化管理设计
业务分层设计
前后端公共代码
日志
热更
文档/规范
纯前端
纯后端
软件质量
新人入职
技术考核/绩效
静态代码分析...
Click to read more ...
lua与c交互笔记
lua 5.3官方英文手册
lua 5.3runoob.com中文手册
交互栈注意事项
栈不是一个全局性的结构,每次函数调用都有自己的私有交互栈。尽管出现递归调用,还是有各自的私用栈。
压/弹栈中的元素个数,具体要看capi的实现来理清元素的位置,否侧参数/返回值个数不对,或类型错误引起逻辑错误。常见的规则如下
lua_toXXX系列函数,都不会将栈顶元素弹出
lua_call,lua_settop这类通过参数,影响弹出多个栈顶元素
lua_next务必符合特定的栈结构,才能遍历元素。
不是所用capi都支持伪索引LUA_REGISTRYINDEX,lua_pcall的第四个参数异常处理函数,就不支持伪索引。
...
Click to read more ...
mmap相比于fwrite写日志,是否有性能优势?
最近想写一个轻巧的日志库。在google搜索有关高性能日志的实现原理。
大多认为用mmap技术可以避免由内核到用户态的页交换。而且当进程崩溃时,内核保证mmap的内存最终都能写入磁盘(但具体啥时候程序已经不可控)。
有人认为日志库的一大特性就是顺序写,读/写缺页依然要中断,mmap与fwrite在这方面性能相差无几。
以下是我在v2ex提的帖子,反对使用mmap的理由较多
mmap相比于fwrite写日志,是否有性能优势
原文:
https://lizijie.github.io/2021/07/31/mmap-%E7%9B%B8%E6%AF%94%E4%BA%8E-fwrite-%E5%86%99%E6%97%A5%E5%BF%97-%E6%98%AF%E5%90%A...
Click to read more ...
生成不重复题目-随机
需求
答题系统,允许角色每天最多答对N道题目。
如果当天题库数量大于N,则要求当天答对的题目不能再出现。
糟糕的代码
以下是生成题目ID的实现大致如下,主要问题是作者没有想到很好的去重办法,
侥幸以为只要尽可能多的循环次数(2倍题库数量),来降低题目再次出现的概率,然而重复的题目还是出现了,这段糟糕的代码才“有幸”见于诸位。
lua代码
-- tQuestSave 记录当天答对题目
-- iQuestListSize 题库的数量
function GenQuestId(tQuestSave, iQuestListSize)
local iTargetQuestId = -1
for i = 1, iQuestListSize * 2, 1 do
i...
Click to read more ...