Erlang游戏服设计总结
这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考。
想到哪说到哪,没有条理可言。
欢迎讨论。
通常Erlang游戏服务的设计涉及到的东东包括如下:
- 任务系统
- 活动系统
- 公会系统
- 玩法系统
- 好友系统
- 聊天系统
- 商城
- 转盘
- 以及其他
我经历过的项目不多,只有2个。在这2个项目中我看到系统建模都采用如下一锅端的方式:
- 即玩家进程加载了所有玩家数据,处理所有可能的系统;
- 整个游戏服通常只有玩家进程、公会进程、玩法进程以及一些公共进程。
- 整个游戏服里你看到的都是进程,看不到应用。
- 通常玩法进程很少,很多逻辑上有区别的玩法都简单粗暴塞进一个玩法进程
我很好奇,Erlang游戏服都这么做吗?在我看来,这一切都是乱糟糟的,不是说Erlang/OTP系统是以应用作为构建块的吗?
为什么我看不到任务应用,活动应用,公会应用、玩法应用、好友应用等等?以应用去划分系统不是更加清晰?也许还能按需加载
数据,而不是加载整个玩家数据呢?以应用建模,兴许能够更加容易复用代码呢?
再者所有东西糅杂在一起,系统的测试基本变得不可能;没有测试也就意味着bug.
尤其常见的是玩法进程夹杂了多种玩法逻辑,通过case if pattern match 去调用不同的代码。
通常搞好了一种玩法,也不经意导致其他玩法出现bug。(我在2个项目中都碰到了这个问题)。
我希望的游戏服设计应该是这样的:
- 系统以应用做为构建块,你会有任务应用、好友应用、商城应用、公会应用等等
- 以应用划分,玩家进程无需加载所有数据,需要的数据在相关的应用解决,甚至于对非热点数据,相关应用可能加载处理完就释放内存了。
- 以应用做划分,系统升级可以以应用为单位,热更更方便。虽然通常数据结构升级都是重启解决的,但如果能在线热更就更好了。
- 应用可单独测试,无需依赖其他东东。
- 不同的玩法以不同的进程构建,一种玩法搞好了,你无需再去理它。
也许以应用去建模,为任务构建进程显得过于大材小用。甚至于说在玩家进程里处理数据更加方便,避免不必要的进程间通信消耗。
那么我想建模成库应用也是有好处的吧。
Erlang游戏服设计总结的更多相关文章
- Elixir游戏服设计一
在Erlang游戏服设计总结http://www.cnblogs.com/rubyist/p/5530575.html里, 我提到我想要的游戏服设计方法,希望以应用做为基础构建块.最近我在学习elix ...
- Elixir游戏服设计五
在<Elixir游戏服设计一>里提到,按照系统功能划分成app要保证原子性很难, 现在想想也没那么难.保证原子性,无非就是需要某个单点去完成操作.那么选择玩家进程去做原子性工作就可以了. ...
- 简单Elixir游戏服设计- 游戏玩法介绍
抄以前的,做了点修改. 到目前为止,我们完成了玩家的数据和进程建模,现在介绍游戏玩法. 为什么我们还不做客户端接入.协议指定呢?为什么还没有网关和数据存储呢.在我接手的游戏, 这些通常已经定下来了,我 ...
- Elixir游戏服设计三
玩家进程用gen_server来建模,我不直接使用 use GenServer, 而是使用exactor,该库可以去掉反锁的接口定义. 我们新建一个 player_server_manager app ...
- 简单Elixir游戏服设计-玩家进程注册
上回说用Registry 做本地注册(跨服可以用syn,只是稍微麻烦点,需要模拟global注册机制,写个封装模块). 修改game_server 项目的mix.exs, 增加应用启动 def app ...
- 简单Elixir游戏服设计-玩家进程跑起来
有了玩家模型,我们试试让玩家进程跑起来. 需要搞个PlayerSupervisor来负责启动和监控玩家进程. defmodule PlayerSupervisor do use Supervisor ...
- 关于Elixir游戏服设计系列
写着写着就废球了,感觉空对空,实在没什么意思. 另外很快就要搞新项目,决定新项目就直接上elixir了.目前该做的准备工作已经探索了一些了. 以下的东西是写给同事参考的,感兴趣的可以看看,提建议更好. ...
- Elixir游戏服设计二
搞一个例子,而没有实际的目标,做起来真是烦人.几次三番都想放弃. 后来想想,即使最后完成不了完整的服务器,把需要的知识点搞搞,摸熟悉也是好的. 这里没有完整的项目目录,主要是对需要的指点进行整理.要完 ...
- 简单Elixir游戏服设计-玩法simple_poker
上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...
随机推荐
- Wampserver查看php配置信息
Wampserver安装完成之后输入localhost会有欢迎Wampserver界面. [查看php配置信息]:在页面点击"phpinfo()"进入php配置信息页面. [使用p ...
- 7_SQL Server通过代码删除数据
--通过代码方式删除数据select *from Employee --第一种删除方式,数据没了,表还在,id接着删除前的id继续加1delete from Employee where EmpId ...
- js实现换肤效果
一,js换肤的基本原理 基本原理很简单,就是使用 JS 切换对应的 CSS 样式表文件.例如导航网站 Hao123 的右上方就有网页换肤功能.除了切换 CSS 样式表文件之外,通常的网页换肤还需要通过 ...
- Core Java 谈谈HashMap
说起Java的HashMap相信大家都不是很陌生,但是对于HashMap内部结构有些同学可能不太了解,咱们下一步就将其展开. HashMap是基于Hash算法的,同理的还有HashSet和HashTa ...
- css编写注意事项(不定时更新)
CSS的编写是需要积累的,而一个好的css编写习惯对我们将来的成长是非常有利的,我会把我平时看到的或者遇到的会不定时的更新到这里,不时翻一下,但求有所进步. 如果各位看官也有看法和建议,评论下,我也会 ...
- MPLS LDP随堂笔记2
前一天排错 Acl 1 匹配所有ospf的数据包 (目的 ospf建立邻居关系 传递路由条目) 2 放行UDP报文 让LDP邻居能互相收发HELLO包 4 放行TCP报文 让LDP邻居能够建立TCP会 ...
- 个人作业(2)---英语学习APP案例分析
第一部分 调研, 评测 1.下载并使用,描述最简单直观的个人第一次上手体验. PC上的必应词典主页面与其他英语学习APP类似,一些英文读物的推送,但是每日阅读需要去浏览器去看有点不太方便,我觉得直接在 ...
- GUI(国际象棋棋盘)
package com.niit.javagui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridB ...
- 201521123049 《JAVA程序设计》 第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 public ...
- 201521123056《Java程序设计》 第2周学习总结
1. 本周学习总结 String类: 不可变字符串型: 粗略介绍了枚举类型: 完全限定类名: 泛型数组列表的应用: 2. 书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源 ...