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 属性去操作。

  • 相关阅读:
    centos 安装 TortoiseSVN svn 客户端
    linux 定时任务 日志记录
    centos6.5 安装PHP7.0支持nginx
    linux root 用户 定时任务添加
    composer 一些使用说明
    laravel cookie写入
    laravel composer 安装指定版本以及基本的配置
    mysql 删除重复记录语句
    linux php redis 扩展安装
    linux php 安装 memcache 扩展
  • 原文地址:https://www.cnblogs.com/rubyist/p/5591807.html
Copyright © 2011-2022 走看看