服务器用Try catch 捕获异常返回就可以了
zzgamer 感觉不行,比如领奖功能,本来是要在response里放奖励的,奖励返回个null总不行吧。 我的意思是比如领奖时,服务端代码崩了,抛了个异常,没有回复客户端,这时候客户端requestCallbacks里的领奖请求会不会一直存在?要不要处理?
IxbxAxx 这个没办法处理,服务器崩了不止是发这个奖励的问题,是影响所有玩家。try catch是为了不让服务器崩,而不是为了让功能正常。 最好的解决办法是上线前修复这个bug。
DuckT 当然是能修复就修复。就是怕线上某个bug,我又没说用try catch捕获,我意思其实是客户端在没有收到服务器回复的情况下,要不要去掉requestCallbacks里的超时的请求,如果一直不去掉会不会有问题。
IxbxAxx 服务器已经出问题了,客户端不管怎么都不能再正常进行游戏了。建议不要做个假象的代码把真实问题隐藏起来,这样更不利于你排查问题。即使是线上,玩家也无法给你提供准确信息。
IxbxAxx 像上面那层说的,返回一个null直接让客户端把问题暴露出来就挺好的
DuckT 我要的效果是一个小功能出问题,不能影响其他的功能,客户端肯定是能正常游戏的,只是那个请求在服务器崩了,客户端还是能玩其他功能的。
那你可以默认返回0个金币,把真正问题藏起来,这样会导致很多玩家都会出现这个“小问题”。这样处理就是给自己找麻烦
DuckT 我的意思不是如何隐藏问题,是客户端在服务器回复超时的情况下怎么处理超时的请求,要不要在requestCallbacks去掉超时的请求,真正问题在服务器那儿肯定有log的。
IxbxAxx 那你客户端网络不好的时候怎么办呢?客户端怎么判断是服务器出了问题,还是单纯网络不好?
DuckT 发包确认回复是kcp的事儿。session断开重新连接那requestCallbacks会清理。
写了测试代码试了么,rpc请求都是try包住的, 异常也会被捕捉,再错误回调回来的,应该不会出现你们说得这个问题的呀
evalli 我在客户端debug,在服务器handler崩了后没收到回复啊
IxbxAxx 应该不会呀,你看下AMRpcHandler里面的HandlerAsync这里有没有执行到。 里面的try catch会捕捉执行结果
evalli 我发的是IActorLocationRequest,
catch完后就throw了。
所以就走不到下面的逻辑,发不回客户端。
evalli 非Actor消息确实能把异常发到客户端😂
IxbxAxx 刚看了下,actorLocation是不会返回,返回的error级别太高,抛异常中断了,可能得问下作者这里为啥要采用异常中断😀
evalli actor消息是进程之间的消息,也就是说,actor消息都是服务器内部通讯用的
同事写了个没有收到服务器回复就客户端转圈圈,然后搭配上这个actorLocation请求崩了就不回复的问题,无论哪一个请求崩了就会直接把客户端卡死😅
等大佬看这篇帖子