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.

ENetPacketPeer

繼承: PacketPeer < RefCounted < Object

ENetPeer 的包裝類。

說明

表示 ENetConnection 對等體的 PacketPeer 實作。

該類無法被直接產生實體,但可以在 ENetConnection.service() 期間,或通過 ENetConnection.get_peers() 進行檢索。

注意:匯出到 Android 時,在匯出專案或使用一鍵部署之前,請確保在 Android 匯出預設中,啟用了 INTERNET 許可權。否則,Android 將阻止任何型別的網路通信。

教學

方法

int

get_channels() const

int

get_packet_flags() 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

The peer is expected to disconnect after it has no more outgoing packets to send.

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_channels() const 🔗

返回為與對等體通信而分配的通道數。


int get_packet_flags() const 🔗

Returns the ENet flags of the next packet in the received queue. See FLAG_* constants for available packet flags. Note that not all flags are replicated from the sending peer to the receiving peer.


String get_remote_address() const 🔗

返回該對等體的 IP 地址。


int get_remote_port() const 🔗

返回該對等體的遠端埠。


PeerState get_state() const 🔗

Returns the current peer state.


float get_statistic(statistic: PeerStatistic) 🔗

Returns the requested statistic for this peer.


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% 之間的中間概率。考慮本地和外部主機的頻寬限制,以確定節流概率的合理限制,即使在最好的條件下也不應超過該限制。