比如一个进程想知道玩家是否在线,在线就发数据给在线玩家,不在线就直接在本进程保存离线数据。
我现在的做法是直接向这个玩家发这个修改数据的actorLocationMessage,然后根据response.error不为success来判断玩家不在线,这样可以吗,还有其他更好的方式吗
可以这么做,但是这么做有个问题,response回去的时候可能玩家正好上线了,看你能不能接受
egametang 那可以请教下,还有其他的更合适的方法吗
如果是固定分配的gate,消息先发给玩家的gate服加上玩家的协程锁,这样就能判断玩家在线状态。加入玩家不在线,那么玩家想上线就必须等消息处理完,假如玩家在线,你就用actorlocation消息发给unit就行了
egametang 暂时也是仿着ET随机gate的方式做的,这样是不是还需要一个中心服,中心服上有在线玩家列表,玩家上线也需要通过中心服来上线,那这类消息就发到中心服加上玩家的协程锁就和你说的一样了吧。
不过玩家在线,用actorlocation消息发给unit好像也会遇到,发的时候玩家在线,发过去的时候玩家离线了的情况,比如地图逻辑让玩家下线的时候(比如玩家在地图上待机多久踢下线),那就不能先地图下线再通知中心下线,地图要下线也要先发给中心服,中心服确认了再发回地图让角色下线。
egametang 像这种多gate不是那么方便判断玩家在线的设计,是不是可以类似location服的设计一样,location是玩家在线以后的定位服务,要跳转地图就要锁location,那设计一个online服,要上线或者下线就锁online,这种其他进程在自己的进程中对玩家的操作,也是先锁online再操作,至少能确保操作过程中玩家只会处于在线或者不在线一种状态。猫大,这样的设计合理吗,会不会有什么比较大的坑存在
ET_Newer 玩家在线你锁住了gate,它就下不了线,gate给unit发actorlocation没问题
ET_Newer 字母哥教程里就设计了LoginCenter服~
所以千古风流不用随机gate,都是分配到固定的gate,这样处理更方便
这些都需要具体问题具体游戏玩法具体分析,不能一概而论
egametang 直接用这个判断在线就行吧?玩家进入map了会add,而且内部也有携程锁
15951836388
不行,这个location不是这么用的,你查的那一刻在,回复的时候可能又不在了