代码怎么判断游戏服务器状态,网络游戏服务器中事件和状态

###网络游戏中传递的报文,主要分为两种:服务器

事件报文网络

状态报文对象

###报文的实现游戏

事件须要保证顺序,可靠,例如玩家使用某个技能,而事件一般能够采用相似 RPC的方式来实现,事件报文的传递,采用相似于TCP的协议来进行。事件

状态报文只须要保证最终的状态一致,例如玩家的HP,位置等数据,所以能够采用UDP传输,只须要保证最终状态被同步一致便可。字符串

一般某个事件发生,会影响状态,例如玩家命中目标这个事件,会影响目标HP状态的变化,一般事件和状态的同步分离进行。同步

而在某个事件发生的时候,须要使用一些玩家的状态参数,例如使用技能时刻,玩家所在的位置和朝向这个状态数据是须要的。io

能够将游戏按照服务器离散帧来划分,例如服务器50ms一帧,这样只须要知道事件执行所在的游戏帧,而客户端知道在该帧时刻,玩家的状态数据,这样就减小了事件命令须要同步的数据了,可是增长了客户端存储的数据量,客户端须要存储多帧的玩家状态。module

同时在命令和状态同步,须要为数据增长相应的服务器帧编号。请求

####报文的格式能够是: length 报文长度

moduleId, msgId 报文的模块和msg编号

flowId 报文的流ID

frameId 报文的服务器帧ID

body 报文体数据

其中flowId 是为了实现 请求响应模式;

而frameId 即为服务器帧id,通常只有服务器对客户端发送。

能够缩减固定包头的长度,将flowId 放置到body协议内,使用protobuf的 optional 字段,对有须要的报文才使用 flowId;

moduleId, msgId, 对于网络协议,能够每一个协议定义一个protobuff message对象,这样须要使用 moduleId和msgId来区分不一样协议;

也能够在 body区域的 protobuf使用一个大一统的pb message,在这个message 头部定义一个字符串,使用字符串来区分不一样的协议,而message后续部分为各类数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值