整理常用linux命令
纯以记录为目的,以便日后翻查或者重新理解命令使用方法
linux
日志收集
  在用grep筛选日志,上下相邻的几条日志会有可能对当时排查问题有另外的提示作用
    
      选荐-n显示日志的行号,观察该行号附近的日志分析问题,如显示每条error的行号
    
  
grep -n "error" FILE_PATH
  选项-A、-B和-C分别可向下、向上和同时上下,额外显示N行日志。如在error日志行上下再显示5行日志
grep -C5 "error" FILE_PATH
  grep多条件筛选日志
    
      与逻辑,如下搜索包含ERROR与指定角色123456的行
    
  
grep "error.*role_id:12...
Click to read more ...
数值程序化 lua中的load运用
[TOC]
数值条件
以下是游戏中常见条件达到逻辑
  收集X个Y道具
  角色达到Y级开启
  任意一个装备升级到Y品质
…
如何在策划配置表中,定义以上规则?常见的办法就是预先定义事件类型X和事件值Y,代码中监听事件X,根据事件的具体逻辑计算相关当前值与事件Y比较,以得出是否满足配置项的条件。
  
    
      目标类型
      说明
    
  
  
    
      1
      获得道具
    
    
      2
      角色当前等级
    
    
      3
      升级装备
    
  
  
    
      配置数值
      说明
    
  
  
    
      {1, X...
Click to read more ...
lua代码规范
目录
  命名
  排版
  设计
  注释
  缩写
命名
  小写蛇形命名
    
      文件和目录名
      本地变量,全局变量g_开头
    
  
local my_var = 0
g_my_var = 0
  大写蛇形命名
    
      全局常量,以G_开头
    
  
G_SERVER_ID = 1
  全局枚举,以E_开头且_TYPE结尾
E_SERVER_TYPE = {
    LOGIN = 1,
    GAME = 2,
    GLOBAL = 3,
}
  bool类型变量,使用正向命名
    -- bad
local fail = false
if not fail then
   -- ...
Click to read more ...
搭建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 ...
游戏开发纲领
鉴于各个项目开发的游戏类型、开发规模和组织结构等有所差异,下文总结了大部分项目开发会涉及到的纲领性总结。有些内容,不便于详细展开,有需要会另开文章介绍。
本人亲身经历其中大部分事项以及流程改进,少部分内容是个人见解并有待验证。
本人能力有限,半刻之间未能想全,此后一旦想起要点,会逐渐添加和完善,如有不对欢迎指正。
[TOC]
框架开发
网络数据
  数据格式
    
      节点间通信。它不像与前端的通信变动频繁,框架定下来后基本不变,格式不需要较高灵活性。另外署上,这 些节点只在内网通信,理论上也不需要太高的安全性或去掉加密。
      前端延时不敏感的业务。可以牺牲部分性能,来满足读写灵活,比如支持数组和嵌套类型。常见的高序列化库有 msgpack和proto...
Click to read more ...