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.

ENetMultiplayerPeer

继承: MultiplayerPeer < PacketPeer < RefCounted < Object

使用 ENet 库实现的 MultiplayerPeer。

描述

MultiplayerPeer 的一种实现,应该在初始化为客户端、服务器或网格之后传递给 MultiplayerAPI.multiplayer_peer。然后就可以通过连接到 MultiplayerAPI 的信号来处理事件。有关 ENet 库包装的更多信息,请参见 ENetConnection

注意:ENet 仅使用 UDP,不使用 TCP。当你想要将服务器端口转发到公共互联网上以便让服务器可以被访问时,只需要转发 UDP 服务器端口即可。可以使用 UPNP 类尝试在启动服务器时自动转发服务器端口。

教程

属性

ENetConnection

host

方法

Error

add_mesh_peer(peer_id: int, host: ENetConnection)

Error

create_client(address: String, port: int, channel_count: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0, local_port: int = 0)

Error

create_mesh(unique_id: int)

Error

create_server(port: int, max_clients: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0)

ENetPacketPeer

get_peer(id: int) const

void

set_bind_ip(ip: String)


属性说明

ENetConnection host 🔗

create_clientcreate_server 之后,创建的底层 ENetConnection


方法说明

Error add_mesh_peer(peer_id: int, host: ENetConnection) 🔗

使用给定的 peer_id 添加一个新的远程对等体,并将其连接到给定的 host

注意:host 必须只有一个处于 ENetPacketPeer.STATE_CONNECTED 状态的对等体。


Error create_client(address: String, port: int, channel_count: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0, local_port: int = 0) 🔗

创建客户端,该客户端使用指定的 port 连接到位于 address 的服务器。给定的地址必须是完全限定的域名(例如 "www.example.com"),或 IPv4 或 IPv6 格式的 IP 地址(例如 "192.168.1.1")。port 是服务器监听的端口。channel_count 参数可用于指定为连接分配的 ENet 通道数。in_bandwidthout_bandwidth 参数可用于将传入和传出带宽限制为给定的每秒字节数。默认值 0 表示无限制的带宽。请注意,ENet 将对在对等体之间的连接的特定端,策略性地丢弃数据包,以确保对等体的带宽不会被淹没。带宽参数还决定了连接的窗口大小,它限制了在任何给定时间可能正在传输的可靠数据包的数量。如果创建了一个客户端,则返回 @GlobalScope.OK;如果该 ENetMultiplayerPeer 实例已经有一个打开的连接(在这种情况下,需要先调用 MultiplayerPeer.close),则返回 @GlobalScope.ERR_ALREADY_IN_USE;如果不能被创建客户端,则返回 @GlobalScope.ERR_CANT_CREATE。如果指定了 local_port,客户端也会监听给定的端口;这对一些 NAT 穿越技术很有用。


Error create_mesh(unique_id: int) 🔗

在网格网络模式下初始化该 MultiplayerPeer。提供的 unique_id 一旦被分配为 MultiplayerAPI.multiplayer_peer,就将被用作本地对等体的网络唯一 ID。在网格网络配置中,需要在调用 add_mesh_peer 之前,使用 ENetConnection 手动设置每个新的对等体。这种技术更先进,它可以更好地控制连接过程(例如,在处理 NAT 穿透时),并更好地分配网络负载(否则会给服务器带来更大的负担)。


Error create_server(port: int, max_clients: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

创建通过 port 监听连接的服务器。该端口需要是一个介于 0 到 65535 之间的可用且未被使用的端口。请注意,低于 1024 的端口是特权端口,可能需要提升权限,具体取决于平台。要更改服务器监听的接口,请使用 set_bind_ip。默认 IP 是通配符 "*",它会监听所有可用的接口。max_clients 是同时允许的最大客户端数,可以使用最大可达 4095 的任何数字,尽管可实现的同时客户端数可能要低得多,并且取决于应用程序。有关带宽参数的其他详细信息,请参阅 create_client。如果服务器被创建,则返回 @GlobalScope.OK;如果该 ENetMultiplayerPeer 实例已经有一个打开的连接(在这种情况下,需要先调用 MultiplayerPeer.close),则返回 @GlobalScope.ERR_ALREADY_IN_USE;如果服务器不能被创建,则返回 @GlobalScope.ERR_CANT_CREATE


ENetPacketPeer get_peer(id: int) const 🔗

返回与给定 id 关联的 ENetPacketPeer


void set_bind_ip(ip: String) 🔗

创建服务器时使用的 IP。默认情况下,这被设置为通配符 "*",它绑定到所有可用的接口。给定的 IP 地址格式需要是 IPv4 或 IPv6,例如:"192.168.1.1"