🏞️ Cellapp
Cellapp服务器中,包含Space空间的创建和销毁、用户的频繁交互、触发器和移动系统的计算、View的管理等。它是一个内网服务器,虽然没有外网带宽的约束,但对CPU和内存方面的要求会相对高一些,所以开发者需要考虑的是,如何把这些业务平摊到不同的Cellapp服务器上,充分利用服务器资源。
我们知道,多开Cellapp,并且分布在不同的物理服务器上,可以利用引擎特性,从架构上达到负载均衡。
注意:
整个引擎体系中,每个app的cid必须唯一,所以在启动多个Baseapp时,需要在启动脚本或启动工具(如WebConsole)中指定不同的cid!
建议:
1. 房间类项目
该游戏类型中,一个房间是相对独立的空间,或者说是一个Space空间。两个房间之间几乎不会有任何交互,所以可以完全使用引擎提供的方式(API-Entity.createCellEntityInNewSpace(None))进行动态创建Space空间。该API的参数为None时,被创建的空间所在的Cellapp会由引擎的负载均衡进行动态选择。
一旦该空间使用完毕,就及时进行销毁即可。
对应的使用场景:
- 棋牌类游戏,如斗地主等;
- 局类游戏,如MOBA、io游戏(球球大作战)等;
- 有副本的游戏,在创建副本时可用该方式。如MMO的副本
2. 唯一且固定“大小”的空间
由于cell是Cellapp上的最小单位,“唯一且固定大小的空间”相当于是在一个固定的cell上的一个Space空间内。引擎是无法进行负载均衡的。
此时,需要在创建空间时预先分配好对应的Cellapp(同样使用API-Entity.createCellEntityInNewSpace(cellappIndex),这里指定cellappIndex即可),并且这些Cellapp的硬件性能相对较好。
再者,可以设置这些Cellapp不参与负载均衡,可以通过KBEngine.setAppFlags(KBEngine.APP_FLAGS_NOT_PARTCIPATING_LOAD_BALANCING)进行设置。这样一来,不会被负载均衡影响,也就不会被放入不该放入的Space空间,变向的减少了压力。
对应的使用场景:
- MMO中的主城;
- ARPG中的主城;
- 棋牌类的大厅