ENetPacketPeer

继承: PacketPeer < RefCounted < Object

ENetPeer 的包装类。

描述

表示 ENetConnection 对等体的 PacketPeer 实现。

该类无法被直接实例化,但可以在 ENetConnection.service 期间,或通过 ENetConnection.get_peers 进行检索。

注意:导出到 Android 时,在导出项目或使用一键部署之前,请确保在 Android 导出预设中,启用了 INTERNET 权限。否则,Android 将阻止任何类型的网络通信。

教程

方法

int

get_channels() const

String

get_remote_address() const

int

get_remote_port() const

PeerState

get_state() const

float

get_statistic(statistic: PeerStatistic)

bool

is_active() const

void

peer_disconnect(data: int = 0)

void

peer_disconnect_later(data: int = 0)

void

peer_disconnect_now(data: int = 0)

void

ping()

void

ping_interval(ping_interval: int)

void

reset()

Error

send(channel: int, packet: PackedByteArray, flags: int)

void

set_timeout(timeout: int, timeout_min: int, timeout_max: int)

void

throttle_configure(interval: int, acceleration: int, deceleration: int)


枚举

enum PeerState: 🔗

PeerState STATE_DISCONNECTED = 0

该对等体已断开连接。

PeerState STATE_CONNECTING = 1

该对等体正在尝试连接。

PeerState STATE_ACKNOWLEDGING_CONNECT = 2

该对等体已确认连接请求。

PeerState STATE_CONNECTION_PENDING = 3

该对等体正在连接。

PeerState STATE_CONNECTION_SUCCEEDED = 4

该对等体已成功连接,但还没有准备好进行通讯(STATE_CONNECTED)。

PeerState STATE_CONNECTED = 5

该对等体已连接,可以进行通讯。

PeerState STATE_DISCONNECT_LATER = 6

该对等体在没有更多的外发数据包可以发送后,将被预定断开连接。

PeerState STATE_DISCONNECTING = 7

该对等体正在断开连接。

PeerState STATE_ACKNOWLEDGING_DISCONNECT = 8

该对等体已确认断开请求。

PeerState STATE_ZOMBIE = 9

该对等体已丢失连接,但并未真正断开连接(因为该对等体还没有对断开连接请求进行确认)。


enum PeerStatistic: 🔗

PeerStatistic PEER_PACKET_LOSS = 0

可靠数据包的平均丢包率,即与 PACKET_LOSS_SCALE 的比率。

PeerStatistic PEER_PACKET_LOSS_VARIANCE = 1

丢包方差。

PeerStatistic PEER_PACKET_LOSS_EPOCH = 2

丢包统计信息上一次被更新的时间(从连接开始后的毫秒数)。丢包统计信息更新的时间间隔为 10 秒,自上次统计信息更新以来,至少必须有一个数据包被发送。

PeerStatistic PEER_ROUND_TRIP_TIME = 3

可靠数据包的平均往返时间。

PeerStatistic PEER_ROUND_TRIP_TIME_VARIANCE = 4

平均往返时间方差。

PeerStatistic PEER_LAST_ROUND_TRIP_TIME = 5

可靠数据包的记录的上次行程时间。

PeerStatistic PEER_LAST_ROUND_TRIP_TIME_VARIANCE = 6

记录的上次行程时间方差。

PeerStatistic PEER_PACKET_THROTTLE = 7

该对等体的当前节流状态。

PeerStatistic PEER_PACKET_THROTTLE_LIMIT = 8

不应被丢弃的不可靠数据包的最大数量。这个值总是大于或等于 1 。初始值等于 PACKET_THROTTLE_SCALE

PeerStatistic PEER_PACKET_THROTTLE_COUNTER = 9

用于增加数据包节流计数器的内部值。该值被硬编码为 7 且无法更改。你可能想查看 PEER_PACKET_THROTTLE_ACCELERATION

PeerStatistic PEER_PACKET_THROTTLE_EPOCH = 10

节流统计数据上一次被更新的时间(自连接开始以来的毫秒数)。节流统计更新的时间间隔是 PEER_PACKET_THROTTLE_INTERVAL

PeerStatistic PEER_PACKET_THROTTLE_ACCELERATION = 11

节流的加速系数。更高的值将使 ENet 更快地适应波动的网络条件,从而导致不可靠的数据包频繁地被发送。默认值为 2

PeerStatistic PEER_PACKET_THROTTLE_DECELERATION = 12

节流的减速系数。更高的值将使 ENet 更快地适应波动的网络条件,从而导致不可靠的数据包不会频繁地被发送。默认值为 2

PeerStatistic PEER_PACKET_THROTTLE_INTERVAL = 13

测量最低平均往返时间的时间间隔,供节流机制使用(单位:毫秒)。默认值为 5000


常量

PACKET_LOSS_SCALE = 65536 🔗

丢包的参考尺度。请参阅 get_statisticPEER_PACKET_LOSS

PACKET_THROTTLE_SCALE = 32 🔗

节流配置的参考值。默认值为 32。 请参阅 throttle_configure

FLAG_RELIABLE = 1 🔗

将要发送的数据包标记为可靠。

FLAG_UNSEQUENCED = 2 🔗

将要发送的数据包标记为无序(不可靠)。

FLAG_UNRELIABLE_FRAGMENT = 8 🔗

将要发送的数据包标记为不可靠,即使数据包太大且需要分片(增加其被丢弃的机会)。


方法说明

int get_channels() const 🔗

返回为与对等体通信而分配的通道数。


String get_remote_address() const 🔗

返回该对等体的 IP 地址。


int get_remote_port() const 🔗

返回该对等体的远程端口。


PeerState get_state() const 🔗

返回该对等体的当前状态。见 PeerState


float get_statistic(statistic: PeerStatistic) 🔗

返回此对等体请求的 statistic。见 PeerStatistic


bool is_active() const 🔗

如果对等体当前处于活动状态(即关联的 ENetConnection 仍然有效),则返回 true


void peer_disconnect(data: int = 0) 🔗

请求与对等体断开连接。一旦断开连接完成,在 ENetConnection.service 期间,将生成一个 ENetConnection.EVENT_DISCONNECT


void peer_disconnect_later(data: int = 0) 🔗

请求与对等体断开连接,但仅在发送完所有队列的传出数据包之后。一旦断开连接完成,在 ENetConnection.service 期间,将生成一个 ENetConnection.EVENT_DISCONNECT


void peer_disconnect_now(data: int = 0) 🔗

强制立即断开与对等体的连接。不会生成 ENetConnection.EVENT_DISCONNECT。不保证外部对等体会收到断开连接通知,并会在从此函数返回后立即重置。


void ping() 🔗

向对等体发送 ping 请求。ENet 会定期自动 ping 所有连接的对等体,但也可以手动调用此函数,确保进行更频繁的 ping 请求。


void ping_interval(ping_interval: int) 🔗

设置向对等体发送 ping 的间隔 ping_interval,单位为毫秒。Ping 既用于监控连接的有效性,也用于在低流量期间动态调整节流,以便在流量高峰期节流具有合理的响应能力。默认的 ping 间隔为 500 毫秒。


void reset() 🔗

强制断开对等体。对等体代表的外部主机不会收到断开连接的通知,并且会在与本地主机的连接上超时。


Error send(channel: int, packet: PackedByteArray, flags: int) 🔗

将数据包 packet 加入通过通道 channel 发送的队列。可用的数据包标志见 FLAG_* 常量。


void set_timeout(timeout: int, timeout_min: int, timeout_max: int) 🔗

设置对等体的超时参数。超时参数控制对等体因无法确认可靠流量而超时的方式和时间。超时值以毫秒表示。

timeout 是一个系数,乘以基于平均往返时间的值,将确定可靠数据包的超时限制。当达到该限制时,超时将加倍,如果该限制已达到 timeout_min,则对等体将断开连接。另一方面,timeout_max 参数定义了一个固定的超时时间,在该时间内必须确认所有数据包,否则对等体将被丢弃。


void throttle_configure(interval: int, acceleration: int, deceleration: int) 🔗

为对等体配置节流参数。

不可靠的数据包会被 ENet 丢弃,以应对与对等体的互联网连接的各种情况。节流表示一个不可靠数据包不应被丢弃并因此由 ENet 将其发送到对等体的概率。通过测量指定 interval 内可靠数据包往返时间的波动,ENet 将按照 acceleration 参数中指定的量增加概率,或者按照 deceleration 参数中指定的量降低概率(两者都是与 PACKET_THROTTLE_SCALE 的比率)。

当节流的值为 PACKET_THROTTLE_SCALE 时,ENet 不会丢弃任何不可靠的数据包,因此所有不可靠数据包以 100% 的概率将被发送。

当节流的值为 0 时,ENet 将丢弃所有不可靠的数据包,因此所有不可靠数据包以 0% 的概率将被发送。

节流的中间值表示发送不可靠数据包的 0% 到 100% 之间的中间概率。考虑本地和外部主机的带宽限制,以确定节流概率的合理限制,即使在最好的条件下也不应超过该限制。