ET版本:8.1
Unity版本:2022
Net版 8.0
本:
定义了一个MessageLocationHandler属性的Handler,MessageLocationHandler<Player, C2S_RoleLevelUpRequest, S2C_RoleLevelUpResonpse>
在Run方法中写逻辑,中间会存在一个扣物品的消息S2CPackageRemove、一个S2C_RoleInfo给客户端,全为IMessage,发送给客户端使用了(参考MapMessageHelper)
unit.Root().MessageLocationSenderComponent>().Get(LocationType.GateSession).Send(unit.Id, message);
现在情况是客户端S2CPackageRemove是在S2C_RoleLevelUpResonpse前收到,而S2C_RoleInfo是在S2C_RoleLevelUpResonpse后接收到。
同样的使用方式,在ET7.2是顺序是
C2S_RoleLevelUpRequest
S2CPackageRemove
S2C_RoleInfo
S2C_RoleLevelUpResonpse
先不管S2C_RoleInfo合理不合理,个人认为像这种在使用在一个Request Response时,Response前服务器主动下发一个IMessage给客户端是很正常的情况,之前7.2的时候,也大规模的这么操作。
目前看了一下Send方法,使用了using (await root.GetComponent<CoroutineLockComponent>().Wait(CoroutineLockType.MessageLocationSender, entityId)),消息进入了一个队列,而且Response是执行完Run后由Reply方法放入MessageSender队列中。
所以想请教一下,ET8.1中如何保证其他逻辑的IMessage在Response前全部发送?