王者猎人
使用技术:skynet,lua,mongo

skynet.cluster的小坑
| |
查到的问题是:在cluster.proxy进行rpc调用的时候,会先node赋值一个指向未知的地址,导致node不为nil。在让出协程的时候,其他协程访问这段代码的时候,会提前跳出队列,然后访问node的时候就有可能出问题。(暂时没有深入探索原因)
后面改成:
| |
道具一键合成:
同一套逻辑,lua用时100ms,js用时<1ms。 分析原因:
- 本身背包设计问题,检查消耗无法用键值对map去表示一组道具,而是用一个数组,导致合成过程中插入新的消耗,合并消耗,检查消耗等操作会产生更多的遍历。
- 设计lua深拷贝,lua深拷贝是用递归实现的,频繁深拷贝导致函数入栈出栈,也有一定的性能消耗。
协程让出,代码执行顺序问题
英雄多阵容
需要把英雄站位,装备穿戴情况保存下来,在副本中直接上阵。直接全盘保存数据占用会很大,有一些养成模块的字段是非必须是,比如名字,uid等
只需要把跟属性计算相关的字段存盘就可以,这样就可以根据简要的信息算出阵容当前属性
skynet自带的mongo接口
skynet中mongo的aggregate操作,用aggregate条件查询数据,同一条语句可能会查出不同的结果
代号血月
实用技术:node.js,typescript,Redis

rpc
在a,b结点非直连,中间隔着一个网关结点gateway的时候,ab结点相互通信的时候,rpc消息都需要在gateway中转发到对方。
在数据同步的时候需要注意rpc消息是否可达。两个结点都要在连上网关之后各自向对方请求数据同步。
比如:a是b的上级结点,a连上gateway之后,a结点需要广播消息给下级b结点。b结点连上gateway之后,需要向b结点发起请求。
聊天的消息队列
旧版本是队列直接用js的数组,js的数组pop第一个元素,会使后续元素都往前移动一位,很耗时。