博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pvp实时对战,同步机制,针对掉线简单分析
阅读量:5869 次
发布时间:2019-06-19

本文共 566 字,大约阅读时间需要 1 分钟。

我们游戏项目,刚开始pvp实时战斗,就是最简单的方式:

客户端发协议,服务器转发指令,服务器不会存任何状态,但是假如A发了一条指令,服务器在转发给B的时候,B恰好断了网,未能及时捕捉,那么这条指令就永远丢失了,

当然,B重连回来的时候可以根据A的战场数据来同步自己的战场,不过这种做法对客户端的编程要求挺高,而且客户端要存很多状态,随机数和时序都容易出错,事实上也是如此,

还有一点就是容易在断线是被外挂修改数据。

 

后面,决定服务器开房间,做个消息队列,专门转发指令,这样首先可以避免,消息量很频繁的时候,不能及时响应,但是最终还是能按顺序逐条转发!

同时这个房间还会存下客户端发送的所有指令,这时候假如一方掉线了,这时候服务器存的整场战斗指令[1,2,3,4,5],但是指令5发送没成功,重连回来的时候:

 

1.假如是在战场中重连回来,那么掉线一方的客户端会存有整场战斗的指令[1,2,3,4],这时候服务器给他推送[1,2,3,4,5],他仅仅只需要恢复指令5就行了。

2.假如是在主界面重连回来,即掉线一方的客户端已经销毁了所有的战斗指令,这时候服务器给他推送[1,2,3,4,5],他需要全部恢复,才能重现战场。

转载于:https://www.cnblogs.com/huangliang-hb/p/6373112.html

你可能感兴趣的文章
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
hexo博客解决不蒜子统计无法显示问题
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>