跳到主要内容

网络监视器

后端

T88将会在调用ne.mi.ne.Connection#sendPacket时记录出站网络包,在ne.mi.ne.Connection#channelRead0记录入站网络包。因此,使用其他方式进行的网络活动不会被记录。通常来讲,由模组自行注册的网络包会被再包装为ServerboundCustomPayloadPacketClientboundCustomPayloadPacket,并经由以上两个方法传输。

对于这两种网络包,T88首先会通过NetworkRegistry查找其对应的Codec,然后传入一个全新的ByteBuf,执行一遍其encode方法,借此得知网络包所占大小。

对于其他类型的网络包,比如原版的一系列网络包,T88会直接尝试查找其write方法并调用。如果以上方法均不奏效,网络包大小会被直接认定为0.

信息

以后可能会加入更多的尝试方法。

提示

由上述信息可以看出,T88在游戏内测得的流量数据可能与操作系统测得的流量数据有非常大的差异。由于我们的目标是监视第三方模组网络通信,故这种差异在特定目标下可以不考虑。

危险

你的网络包的encodedecode部分不应该有任何副作用。这不仅是出于对网络监视器兼容性的考虑,具有副作用的编解码器是非常糟糕的设计。

在算得网络包大小后,T88会利用ModFileScanData遍历所有类来尝试找到匹配网络包类名的modid。如果查找失败,则会返回unknown

两个ConcurrentHashMap被交替用于存储当前记录周期内的网络数据。通常的刷新周期为1秒,由于是由TickEvent驱动,故视游戏性能情况可能会有延迟。

GUI

在游戏内按下Alt+W即可打开网络监视器。

屏幕最上方将会有三个tab项,分别是客户端网络监视、服务端网络监视、设置。

提示

对于1080p屏幕,建议将界面尺寸设为2

在单人游戏时可能会出现记录交叉混叠的情况。以下说明均基于多人游戏。

监视器面板

面板最上方将会显示当前的总流量大小和收发网络包的个数。

信息

由上文我们可以知道,T88不考虑例如TCP/IP报文头部之类的数据。

画面中央的是条状图绘制区域。你可以选择分别查看入站和出站网络监视图。网络监视图为横向绘制,原点位于左下角,纵轴是时间,横轴是大小。每1秒钟在底部绘制新一条,并将之前的向上推挤。纵轴最大容量为20(秒),横轴则为动态缩放,保证20秒内最大的一条记录占满横轴长度。

网络包按modid进行合并上色,modid字符串哈希值低六位(十六进制)决定了条带的颜色。为防止不同模组流量大小过于悬殊导致的问题,在计算条带长度时,取对数的三次方作为条带相对长度计算的依据。

将鼠标悬停在一个条带上时,详细的网络包数据将以tooltip形式展示。各个网络包类将会按大小顺序由上至下排列并着色。

暂停按钮可以停止面板的滚动,以方便进行截图等操作。

信息

服务端监视面板的工作原理略有不同:在打开服务端监视面板后,客户端每秒会向服务端发出请求数据指令,服务端收到后才会将上一秒的数据打包返回。

由于一次性传输网络数据所需空间较大,故服务端只响应创造模式玩家或具有2级权限玩家的请求。

设置

单位

指定新生成的条带以及汇总数据在显示时使用的单位。默认为字节(Byte,KiB/S),你可以根据自己的喜好设置为比特(Bit,Kbps)。