天才一秒记住【长江书屋】地址:https://www.cjshuwu.com
,她也是相当恭维地称呼对方:“乔大神,我想问你个事儿。”
阮平夏觉得代码这事还是得问问it界大佬,毕竟术业有专攻,说不定他们会有不同的视角来解读这事。
乔俊楚看到阮平夏发来的一大段话,他理解、沉思了片刻后,也给阮平夏回道:
【正常情况下,我们本身底层真实用户是“蓝星玩家”
,进入环境后,系统会给我们分配一个代理账号,也就是我们在副本世界里的角色身份,你就是艾莉诺?冯?莱斯特。
】
【正常的全部对外交互,所有消息、指令输出,全部走代理账号做封装转发。
】
【外部模块收到信号,只能看见代理身份,原始用户id会被封装层拦截,不对外暴露。
】
【所以正常逻辑是:你说话发出指令→封装层打标签【艾莉诺?冯?莱斯特】→发送给npc实例tony。
tony接收之后写本地日志,来源字段就记录艾莉诺。
但你看到的日志,来源直接写了你原始用户id。
出现这种,大体就两类情况。
】
阮平夏继续往下看,乔俊楚说:
第一种,接收端本地解析故障。
也就是tony这边出问题。
tony是一个独立运行实例,他内部有一道身份过滤校验子程序,作用就是把收到的信号,只提取代理身份,丢弃底层原始标识。
如果这个实例cpu进程资源被疯狂占满,别的模块抢占绝大多数资源,负责身份掩码过滤的子程序被挤垮、调用超时、直接跳过执行。
数据包没经过过滤清洗,原始数据裸流直接喂给日志打印函数。
日志就会把藏在内层的真实源id直接打印出来。
这只是接收方本地日志写错。
发给全局系统的数据报文,会依旧带着代理艾莉诺的身份。
只有tony自己本机记录踩坑。
算属于实例高负载下的偶发bug。
但这种故障有前提条件:必须是接收方进程濒临崩溃,过滤模块失效。
状态恢复之后,这个bug大概率复现不出来。
第二种情况嘛,不能排除局部中间人篡改。
信号从你发出之后,抵达tony进程之前,在二者中间的通信链路里,有东西修改了tony本机日志的打印字段。
可能只改tony本地显示输出,不改上报给总服务器的数据包。
外面什么都看不出,唯独tony这边日志被改写。
干这个不需要改动你本人的封装层,只需要拥有这个对局空间局部数据流读写权限。
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!