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

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

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

游戏大体分为如下服务器

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

  1. Elixir游戏服设计五

    在<Elixir游戏服设计一>里提到,按照系统功能划分成app要保证原子性很难, 现在想想也没那么难.保证原子性,无非就是需要某个单点去完成操作.那么选择玩家进程去做原子性工作就可以了. ...

  2. Elixir游戏服设计一

    在Erlang游戏服设计总结http://www.cnblogs.com/rubyist/p/5530575.html里, 我提到我想要的游戏服设计方法,希望以应用做为基础构建块.最近我在学习elix ...

  3. 简单Elixir游戏服设计- 游戏玩法介绍

    抄以前的,做了点修改. 到目前为止,我们完成了玩家的数据和进程建模,现在介绍游戏玩法. 为什么我们还不做客户端接入.协议指定呢?为什么还没有网关和数据存储呢.在我接手的游戏, 这些通常已经定下来了,我 ...

  4. Elixir游戏服设计三

    玩家进程用gen_server来建模,我不直接使用 use GenServer, 而是使用exactor,该库可以去掉反锁的接口定义. 我们新建一个 player_server_manager app ...

  5. 简单Elixir游戏服设计-玩家进程跑起来

    有了玩家模型,我们试试让玩家进程跑起来. 需要搞个PlayerSupervisor来负责启动和监控玩家进程. defmodule PlayerSupervisor do use Supervisor ...

  6. 简单Elixir游戏服设计-玩家进程注册

    上回说用Registry 做本地注册(跨服可以用syn,只是稍微麻烦点,需要模拟global注册机制,写个封装模块). 修改game_server 项目的mix.exs, 增加应用启动 def app ...

  7. Elixir游戏服设计四

    上章说到我们要引入syn https://github.com/ostinelli/syn/ 看过文档,它并没有直接提供{via, Module, Name} 相关的方法.我们需要封装一下. Name ...

  8. Elixir游戏服设计二

    搞一个例子,而没有实际的目标,做起来真是烦人.几次三番都想放弃. 后来想想,即使最后完成不了完整的服务器,把需要的知识点搞搞,摸熟悉也是好的. 这里没有完整的项目目录,主要是对需要的指点进行整理.要完 ...

  9. 简单Elixir游戏服设计-玩法simple_poker

    上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...

随机推荐

  1. 使用jquery.form.js提交表单上传文件

    方法: 1.formSerilize()  用于序列化表单中的数据,并将其自动整理成适合AJAX异步请求的URL地址格式. 2.clearForm()   清除表单中所有输入值的内容. 3.restF ...

  2. fetch的使用说明

    1.RN官方文档中,可使用XMLHttpRequest var request = new XMLHttpRequest(); request.onreadystatechange = (e) =&g ...

  3. angular之scope.$watch

    某“大神”挖了个陨石坑,我于是乎似懂非懂的接手,玩了一个月angular.现在项目告一段落,暂别了繁重的重复性工作,可以开始回顾.认真的折腾下之前犹抱琵琶的angular. angular吸引人的特性 ...

  4. C# 引用类型之特例string

    在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便: 1)字符串的直接赋值:本身字符串就是引用类型,应 ...

  5. 201521123082《Java程序设计》第3周学习总结

    201521123082<Java程序设计>第3周学习总结 标签(空格分隔): Java 1.本周学习总结 XMind图: 2.书面作业 Q1.代码阅读 public class Test ...

  6. 团队作业4---第一次项目冲刺(AIpha版本)第二天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 完成了主页及登录页面 2.功能 完成了后端数据处理的全部基本功能:a.数据结构设计及数据交互操作 b.博客页面数据采 ...

  7. Java 第八周总结

    1. 本周学习总结 2. 书面作业 1.List中指定元素的删除 1.1 实验总结 list中可以通过list.get(i)来获取具体第几个的元素的值,再通过compareTo来对比 通过in.has ...

  8. 201521123096《Java程序设计》第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 继承能够动态绑定,运行时能够自动的选择调用方法,十分方便. 2. 书面作业 (1)注释的应用 ...

  9. 201521123070 《JAVA程序设计》第9周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 Q1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 ...

  10. eclipse 项目引入第三方jar包 3种方法

    我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3种Eclipse引入jar包的方式. 1.最常用的普通操作 ...