RakNet学习(20) -- Statistics

66 篇文章 2 订阅

统计

 

如何读取RakNet的统计数据,以及如何解析统计数据

       统计数据对于在线的游戏非常重要,因为它可以让你看到你游戏的传输瓶颈在什么地方。关于统计功能,RakNet提供了结构体RakNetStatics,由RakPeerInterface中的GetStatics()函数返回。这个结构体在Source/RakNetStatics.h中定义。函数StaticsToString()用于将这些统计参数转化为格式化缓存形式。

enum RNSPerSecondMetrics

{

       // 每一次调用RakPeerInterface::Send()所推送的字节数。

       USER_MESSAGE_BYTES_PUSHED,

       // 通过调用RakPeerInterface::Send()所发送的用户数据的字节数。

       // 这个数值要小于或等于USER_MESSAGE_BYTES_PUSHED的值

       // 由于拥塞,一条消息可能已经推送了,但是没有发送

       USER_MESSAGE_BYTES_SENT,

       // 重发了多少字节用户消息。如果消息标识为可靠类型但是消息没有到达

       // 或消息确认没有到达,这个消息就会重发。

       USER_MESSAGE_BYTES_RESENT,

       // 接收并且成功了多少字节用户消息

       USER_MESSAGE_BYTES_RECEIVED_PROCESSED,

       // 接收了,但是由于格式错误而丢弃的消息字节数。这个值通常为0

       USER_MESSAGE_BYTES_RECEIVED_IGNORED,

       // 事实上发送的数据的字节数,包括每一条消息和每一个数据包的消耗,

       // 可靠性消息确认

       ACTUAL_BYTES_SENT,

       // 事实上接收到的数据的字节数,包括开销和确认

       ACTUAL_BYTES_RECEIVED,

       // \internal

       RNS_PER_SECOND_METRICS_COUNT

};

// \brief 网络统计使用

// 存储与网络使用相关的统计信息

struct RAK_DLL_EXPORT RakNetStatistics

{

       // 对于RNSPerSecondMetrics中的每一种类型, 超过最后一秒的值是什么?

       uint64_t valueOverLastSecond[RNS_PER_SECOND_METRICS_COUNT];

       // 对于RNSPerSecondMetrics中的每一种类型,在整个连接的生命周期的总值是什么?

       uint64_t runningTotal[RNS_PER_SECOND_METRICS_COUNT];

 

       // 连接是什么时候开始的?

       /// \sa RakNet::GetTimeUS()

       RakNet::TimeUS connectionStartTime;

       // 我们当前的发送速率被拥塞控制遏制??

       // 如果你每一秒钟发送数据量比你实际的带宽要大这个值为TRUE

       bool isLimitedByCongestionControl;

       // 如果isLimitedByCongestionControl是true, 限制是什么,每一秒钟的字节数是多少?

       uint64_t BPSLimitByCongestionControl;

       //发送速率是否受到RakPeer::SetPerConnectionOutgoingBandwidthLimit()函数的限制?

       bool isLimitedByOutgoingBandwidthLimit;

       // 如果isLimitedByOutgoingBandwidthLimit为true,每一秒钟字节数的限制是什么?

       uint64_t BPSLimitByOutgoingBandwidthLimit;

       // 每一个优先级,有多少消息在等待发送?

       unsigned int messageInSendBuffer[NUMBER_OF_PRIORITIES];

       // 每一个优先级,有多少字节数据等待发送?

       double bytesInSendBuffer[NUMBER_OF_PRIORITIES];

       // 有多少字节数据等待在重发缓存?这个数据包括等待确认的消息,

       // 正常应该是较小的值

       // 如果这个值随着时间增长,需要发送数据的速率正在超过了带宽能力  

       // 参考BPSLimitByCongestionControl值

       unsigned int messagesInResendBuffer;

       // 有多少字节等待在重发队列也可参考messagesInResendBuffer值

       uint64_t bytesInResendBuffer;

       // 在最后一秒,系统丢包率是多少?这个值范围是从0.0 (没有)到1.0 (100%丢包)

       float packetlossLastSecond;

       // 在连接期间,平均总的丢包率是多少?

       float packetlossTotal;

};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值