您的位置:首页 > 其它

一日一点RakNet(21)--Statistics

2012-03-17 17:18 246 查看
统计

如何读取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;

};

By 北洋小郭

转载请注明出处,切勿用于商业。谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: