这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考。

想到哪说到哪,没有条理可言。

欢迎讨论。

通常Erlang游戏服务的设计涉及到的东东包括如下:

  • 任务系统
  • 活动系统
  • 公会系统
  • 玩法系统
  • 好友系统
  • 聊天系统
  • 商城
  • 转盘
  • 以及其他

我经历过的项目不多,只有2个。在这2个项目中我看到系统建模都采用如下一锅端的方式:

  • 即玩家进程加载了所有玩家数据,处理所有可能的系统;
  • 整个游戏服通常只有玩家进程、公会进程、玩法进程以及一些公共进程。
  • 整个游戏服里你看到的都是进程,看不到应用。
  • 通常玩法进程很少,很多逻辑上有区别的玩法都简单粗暴塞进一个玩法进程

我很好奇,Erlang游戏服都这么做吗?在我看来,这一切都是乱糟糟的,不是说Erlang/OTP系统是以应用作为构建块的吗?

为什么我看不到任务应用,活动应用,公会应用、玩法应用、好友应用等等?以应用去划分系统不是更加清晰?也许还能按需加载

数据,而不是加载整个玩家数据呢?以应用建模,兴许能够更加容易复用代码呢?

再者所有东西糅杂在一起,系统的测试基本变得不可能;没有测试也就意味着bug.

尤其常见的是玩法进程夹杂了多种玩法逻辑,通过case if pattern match 去调用不同的代码。

通常搞好了一种玩法,也不经意导致其他玩法出现bug。(我在2个项目中都碰到了这个问题)。

我希望的游戏服设计应该是这样的:

  • 系统以应用做为构建块,你会有任务应用、好友应用、商城应用、公会应用等等
  • 以应用划分,玩家进程无需加载所有数据,需要的数据在相关的应用解决,甚至于对非热点数据,相关应用可能加载处理完就释放内存了。
  • 以应用做划分,系统升级可以以应用为单位,热更更方便。虽然通常数据结构升级都是重启解决的,但如果能在线热更就更好了。
  • 应用可单独测试,无需依赖其他东东。
  • 不同的玩法以不同的进程构建,一种玩法搞好了,你无需再去理它。

也许以应用去建模,为任务构建进程显得过于大材小用。甚至于说在玩家进程里处理数据更加方便,避免不必要的进程间通信消耗。

那么我想建模成库应用也是有好处的吧。

Erlang游戏服设计总结的更多相关文章

  1. Elixir游戏服设计一

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

  2. Elixir游戏服设计五

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

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

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

  4. Elixir游戏服设计三

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

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

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

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

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

  7. 关于Elixir游戏服设计系列

    写着写着就废球了,感觉空对空,实在没什么意思. 另外很快就要搞新项目,决定新项目就直接上elixir了.目前该做的准备工作已经探索了一些了. 以下的东西是写给同事参考的,感兴趣的可以看看,提建议更好. ...

  8. Elixir游戏服设计二

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

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

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

随机推荐

  1. java常见面试题(一)

    一.Spring面试的问题 1.spring的事务认识 事务注解方式: @Transactional,当标于类前时,该类的所有public方法都进行事物处理. 事务的传播行为: @Transactio ...

  2. C语言中复数运算及调用blas,lapack中复数函数进行科学计算

    C语言中常用的数据类型主要int, float ,double ,char 等,但在科学运算中复数扮演着重要角色.这里讲下C语言中的复数运算以及如何调用blas,lapack库中的复数函数来进行科学计 ...

  3. 图像处理:卷积模块FPGA 硬件加速

    本文记录了利用FPGA加速图像处理中的卷积计算的设计与实现.实现环境为Altera公司的Cyclone IV型芯片,NIOS II软核+FPGA架构. 由于这是第一次设计硬件加速模块,设计中的瑕疵以及 ...

  4. springboot配置swagger2

    .在pom.xml里添加jar包: <dependency> <groupId>io.springfox</groupId> <artifactId>s ...

  5. Python中库或者模组的解释

  6. Java课程设计——计算器团队博客

    1.团队名称.团队成员介绍(需要有照片) 1.1团队名称 707 1.2团队成员介绍 谢元将:组长 罗登宇:组员 王华俊:组员 2. 项目git地址 谢元将 罗登宇 王华俊 3. 项目git提交记录截 ...

  7. 201521123016《Java程序设计》第10周学习总结

    1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 只有执 ...

  8. 201521123101 《Java程序设计》第9周学习总结

    1. 本周学习总结 2. 书面作业 1. 常用异常,题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 遇到ArrayI ...

  9. PHOTOSHOP常用快捷键大全

    PHOTOSHOP常用快捷键大全一.文件新建 CTRL+N打开 CTRL+O 打开为 ALT+CTRL+O关闭 CTRL+W保存 CTRL+S 另存为 CTRL+SHIFT+S另存为网页格式 CTRL ...

  10. eclipse中svn插件在线安装方式

    SVN插件地址:http://subclipse.tigris.org/update_1.8.x 第一步:eclipse>Help菜单>Install New Software- 第二步: ...