netty 同步返回结果

DanieLong 发布于 07/09 21:03
阅读 245
收藏 0

各位大神,最近在开发netty,现在有一个需求,要对某一种读写器设备进行操作,跟设备连接上后,要发若干个包初始化设备,每一个包都要依赖前一个包的返回值,前一个包发送成功后,设备返回成功信息才能发下一个包,我已经冥思苦想好几天,找不到办法,各位大神能不能提供好的解决方案

加载中
0
kakai
kakai

这个用不着网络同步吧,只要顺序发送、处理就行了吧,比如客户端首先发送1包,服务端处理完1包返回给客户端处理结果,客户端收到服务端对1包的处理结果发送2包,服务端处理完2包返回给客户端处理结果……

kakai
kakai
回复 @DanieLong : 我一般做游戏的长连接都是包结构相同(这样也能方便统一做粘包断包的解码),每个包对应一个通信协议码,根据通信协议码路由到对应的协议处理器处理业务逻辑。按照业务流程再根据协议码无论怎么组合都是可以的,按照指定顺序执行也很简单。
DanieLong
DanieLong
回复 @kakai : 包结构不同,比如说,获取设备版本,可以单独操作,但如果要更新设备版本,就需要两步操作,先获取设备版本,再发新版本上去;如果要初始化设备,就要1.获得设备能力,2.获取设备版本,3.发送响应的配置,设备才算初始化成功了,差不多就是这个意思。
kakai
kakai
回复 @DanieLong : 如果执行顺序能由客户端、服务端某一方决定,那么最终还是一个简单的顺序发送接收处理,和网络同步没什么关系。
kakai
kakai
回复 @DanieLong : 搞不懂几十种包中的这个“种”是什么意思,包结构不同,还是数据包标识码不同?你们这种情况,初始化设备应该强制协定数据包发送顺序吧,又要随意组合,又要顺序执行,这不是有点矛盾吗?你们这种随意组合由谁限制逻辑执行顺序呢?又是怎么约束这种顺序的?比如ABCD四个数据包,处理完A,既然可以随意组合,又怎么知道下一个该执行哪个呢?
DanieLong
DanieLong
对于简单的操作是可以这样,关键是现在设备有几十种包,每种包都要支持单独操作,顺序操作,也就是说他的包发送逻辑是希望可以自由组合的,我现在困惑的就是这里,
0
Mark哥是我
Mark哥是我
设备会吧结果返回给你?
DanieLong
DanieLong
会的
0
kakai
kakai

你看你们是否可以在有可能需要组合或理解为同步的通信协议上加个功能性标识(一个字节就行),比如获取设备版本的通信协议中功能标识为0标识单独操作;更新设备则获取设备版本的功能标识为1,根据这个功能标识再去判断是否需要进行第二步的更新设备操作;初始化设备的所有通信协议的功能标识为2,根据2这个功能标识按顺序走下面的流程。

kakai
kakai
回复 @DanieLong : 前期规划不够全面,导致现在简单的问题复杂化,建议参看https://blog.csdn.net/u013721793/article/details/51204076,既然设备已经固化,我觉得你的问题可能是悬案了
DanieLong
DanieLong
回复 @kakai : 现在设备没法改了,只能是软件去处理
kakai
kakai
加上这个功能标识把复杂的问题简单化,根据此功能标识则可简单的处理为 发送1->处理1->发送2->处理2 这种流程了,无需网络同步,我个人感觉哪怕是网络同步也无法实现你的这个问题。
返回顶部
顶部