Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
ENetPacketPeer
继承: PacketPeer < RefCounted < Object
ENetPeer 的包装类。
描述
表示 ENetConnection 对等体的 PacketPeer 实现。
该类无法被直接实例化,但可以在 ENetConnection.service() 期间,或通过 ENetConnection.get_peers() 进行检索。
注意:导出到 Android 时,在导出项目或使用一键部署之前,请确保在 Android 导出预设中,启用了 INTERNET
权限。否则,Android 将阻止任何类型的网络通信。
教程
方法
get_channels() const |
|
get_packet_flags() const |
|
get_remote_address() const |
|
get_remote_port() const |
|
get_state() const |
|
get_statistic(statistic: PeerStatistic) |
|
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() |
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_statistic() 和 PEER_PACKET_LOSS。
PACKET_THROTTLE_SCALE = 32
🔗
节流配置的参考值。默认值为 32
。 请参阅 throttle_configure()。
FLAG_RELIABLE = 1
🔗
将要发送的数据包标记为可靠。
FLAG_UNSEQUENCED = 2
🔗
将要发送的数据包标记为无序(不可靠)。
FLAG_UNRELIABLE_FRAGMENT = 8
🔗
将要发送的数据包标记为不可靠,即使数据包太大且需要分片(增加其被丢弃的机会)。
方法说明
返回为与对等体通信而分配的通道数。
int get_packet_flags() const 🔗
返回接收队列中下一个数据包的 ENet 标志。可用的数据包标志见 FLAG_*
常量。请注意,并非所有标志都会从发送端复制到接收端。
String get_remote_address() const 🔗
返回该对等体的 IP 地址。
返回该对等体的远程端口。
返回该对等体的当前状态。见 PeerState。
float get_statistic(statistic: PeerStatistic) 🔗
返回此对等体请求的 statistic
。见 PeerStatistic。
如果对等体当前处于活动状态(即关联的 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% 之间的中间概率。考虑本地和外部主机的带宽限制,以确定节流概率的合理限制,即使在最好的条件下也不应超过该限制。