zoukankan      html  css  js  c++  java
  • 关于Elixir游戏服设计系列

    写着写着就废球了,感觉空对空,实在没什么意思。

    另外很快就要搞新项目,决定新项目就直接上elixir了。目前该做的准备工作已经探索了一些了。

    以下的东西是写给同事参考的,感兴趣的可以看看,提建议更好。

    游戏大体分为如下服务器
    
    1. 网关服务器(必须)
    2. 游戏服务器(必须)
    3. 后台管理服务器(一般必须)
    4. 数据存储服务器(必须)
    5. 支付服务器(安桌或者第三方回调的话,必须)
    
    
    Elixir umbrella 项目目录结构可大概如下
    
    1. 游戏数据模型(包括简单的获取更新逻辑)
    2. 通讯协议  https://github.com/bitwalker/exprotobuf
    3. 配置和常量  
    4. 一般性的工具(日期时间处理https://hex.pm/packages/timex、随机数等)
    5. 数据访问接口
    6. 网关、游戏、后台、支付等上层应用
    
    常用基础设施
    1. 数据库客户端(随数据库服务器定)
    2. 进程注册与查找(全局)gproc(基于ets) 或syn 基于 mnesia 内存存储
    3. 定时任务   https://github.com/c-rack/quantum-elixir
    4. socket 接入   ranch
    5. 后台web支持 cowboy、plug
    6. 日志  自带logger 
    7. 日志backend backend https://github.com/onkel-dirtus/logger_file_backend
    8. 进程池 poolboy (暂时没有用到)
    
    测试与文档
    0. 能够测试驱动开发当然最好
    1. DocTest 如果有最好 
    2. 单元测试  自带ExUnit 模拟 https://github.com/jjh42/mock  
    3. 文档  函数功能描述、spec (public 函数要有)
    4. ExDoc 附带生成物(可不理会)
    
    具体需要测试的地方
    1. DocTest 函数自带测试
    2. 数据模型的单元测试
    3. GenServer 的测试
    
    关于测试与副作用限制
    1. 代码函数尽量只做一件事,并且是函数式的,没有副作用
    2. 有副作用的地方应该限制到GenServer 的handle_XXX
    3. 这样做的结果是一堆小函数, 容易支持测试
    
    
    关于配置和常量生成
    1. 可以采用类似exprotobuf 做成通用的。(有个xlsxir 库可直接读取excel)
    2. 好处,编译自动处理;坏处, 没有生成代码,不方便查看。
    
    
    其他工具
    exactor  简化GenServer接口定义
    pipe_here 管道操作符参数位置
    
    关于socket与玩家进程
    1. ranch 接受socket连接后会起进程,建议就这样让socket进程与玩家进程独立

    另外配置代码部分之前写的比较差劲,是从csv 转。今天使用了处理xlsx的库,并且用宏实现了。达到足够灵活的效果。如下

    defmodule RoomConfig do
        use ConfigGen, path: "lib/room_config.xlsx"
        get
        ids
        all
        ids_by :game_type
        items_by :game_type
        ids_by2 :game_type, :sub_type
        items_by2 :game_type, :sub_type
        ids_by_fn :ids_lq_10, fn item -> item.id <= 10 end
        items_by_fn :items_lq_10, fn item -> item.id <= 10 end
    end

    它会编译生成如下方法

    非常方便是不是?再有更复杂的需求,可以直接RoomConfig里定义需要的函数,然后通过@items 属性去操作。

  • 相关阅读:
    《大道至简》第一章 编程的精义
    java课堂练习7
    Java课后练习6
    Java课后练习5
    Java课后练习4
    Java课后练习3
    课堂练习
    求和程序实验报告
    大道至简第二章读后感
    课堂作业例子
  • 原文地址:https://www.cnblogs.com/rubyist/p/5591807.html
Copyright © 2011-2022 走看看