关于Elixir游戏服设计系列
Posted damnit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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 属性去操作。
以上是关于关于Elixir游戏服设计系列的主要内容,如果未能解决你的问题,请参考以下文章