erlang 游戏没有什么开源的,可以借鉴的并不多.可能很多处理得不好.但是也是可以自己尝试以下的.
rpg游戏的地图模块,是广播量压力最大的. 首要的目标是减少地图模块的压力.思考过几个模型.最后敲定了一个.
先从集群层面说明:
集群中的每一个节点都有完整的地图信息(地图进程), 把地图分块--单元模块(单元进程). 玩家进程在单元进程上标示自己位置.
在单元进程角度看:玩家进程有两种 :本节点玩家进程,其他节点玩家进程 .(为什么区分,我后说)
地图进程:M
单元进程:U
玩家进程有两种: 本节点玩家:LP 其它节点玩家:RP
初始化:
M初始化时候,把世界切分,创建全部的U. U会初始化具体的信息(地形场景,npc位置之类)
工作流程: (假设节点A,B)
玩家随机登录到一个节点A,那么这个玩家进程对于A来说是LP,对B来说是RP.
每个玩家都会有一个地点(上次退出坐标)注册到M, M会把LP注册到对应的U上.
接下来要同步各节点中的信息:
U的信息要更新了(因为有个玩家加入,要告诉附近玩家),U会把信息汇总给M. 节点A的M会通知B节点的M,B节点的M再通知对应的U
接下来要通知附近玩家有人登录了:
假设这个玩家附近有两个人,一个的进程在A节点,一个的进程在B节点.
新增玩家在A节点,它发出信号给U,U通知了在节点A的那个玩家进程 LP.
同时A节点的U会汇总信息给A节点的M, A节点的M会通知B节点的M, B节点M通知B节点的U, B节点的U会通知另外一个运行在节点B的玩家
简单概况就是:
地图进程负责节点间同步. 玩家进程与单元进程交互而且 单元进程之和属于同节点的玩家进程交互(U和LP).只发布属于同节点的玩家进程信息
为什么这样做?
我不知道行内怎么做法,但是我这个模型可以做到的是:
把广播信息放在节点内部.
夸节点的广播由地图进程管理,变成了单点通讯.
地图进程同步的策略可以调优.(按时间间隔,按信息量)
先这样做吧
~~by dp