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...
ENetConnection
Eredita: RefCounted < Object
Una classe wrapper per un ENetHost.
Descrizione
Lo scopo di ENet è quello di fornire un livello di comunicazione di rete relativamente leggero, semplice e robusto al di sopra di UDP (User Datagram Protocol).
Tutorial
Metodi
void |
bandwidth_limit(in_bandwidth: int = 0, out_bandwidth: int = 0) |
void |
broadcast(channel: int, packet: PackedByteArray, flags: int) |
void |
channel_limit(limit: int) |
void |
compress(mode: CompressionMode) |
connect_to_host(address: String, port: int, channels: int = 0, data: int = 0) |
|
create_host(max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) |
|
create_host_bound(bind_address: String, bind_port: int, max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) |
|
void |
destroy() |
dtls_client_setup(hostname: String, client_options: TLSOptions = null) |
|
dtls_server_setup(server_options: TLSOptions) |
|
void |
flush() |
get_local_port() const |
|
get_max_channels() const |
|
pop_statistic(statistic: HostStatistic) |
|
void |
refuse_new_connections(refuse: bool) |
void |
socket_send(destination_address: String, destination_port: int, packet: PackedByteArray) |
Enumerazioni
enum CompressionMode: 🔗
CompressionMode COMPRESS_NONE = 0
Nessuna compressione. Questa utilizza la maggiore larghezza di banda, ma ha il vantaggio di richiedere meno risorse sulla CPU. Questa opzione può anche essere utilizzata per facilitare il debug di rete attraverso strumenti come Wireshark.
CompressionMode COMPRESS_RANGE_CODER = 1
La codifica integrata di ENet. Funziona bene su pacchetti piccoli, ma non è l'algoritmo più efficiente per pacchetti più grandi di 4 KB.
CompressionMode COMPRESS_FASTLZ = 2
Compressione FastLZ. Questa opzione utilizza meno risorse sulla CPU rispetto a COMPRESS_ZLIB, a scapito di usare più larghezza di banda.
CompressionMode COMPRESS_ZLIB = 3
Compressione Zlib. Questa opzione utilizza meno larghezza di banda rispetto a COMPRESS_FASTLZ, a scapito di usare più risorse sulla CPU.
CompressionMode COMPRESS_ZSTD = 4
Compressione Zstandard. Nota che questo algoritmo non è molto efficiente per pacchetti più piccoli di 4 KB. Pertanto, si consiglia di utilizzare altri algoritmi di compressione nella maggior parte dei casi.
enum EventType: 🔗
EventType EVENT_ERROR = -1
Si è verificato un errore durante service(). Sarà probabilmente necessario distruggere l'host attraverso destroy() e ricrearlo.
EventType EVENT_NONE = 0
Nessun evento si è verificato entro il limite di tempo specificato.
EventType EVENT_CONNECT = 1
Una richiesta di connessione avviata da enet_host_connect è stata completata. L'array conterrà il peer che si è connesso con successo.
EventType EVENT_DISCONNECT = 2
Un peer si è disconnesso. Questo evento viene generato al termine con successo di una disconnessione avviata da ENetPacketPeer.peer_disconnect(), se un peer è scaduto oppure se una richiesta di connessione inizializzata da connect_to_host() è scaduta. L'array conterrà il peer che si è disconnesso. Il campo dei dati contiene i dati forniti dall'utente che descrivono la disconnessione, oppure 0, se non sono disponibili.
EventType EVENT_RECEIVE = 3
Un pacchetto è stato ricevuto da un peer. L'array conterrà il peer che ha inviato il pacchetto e il numero del canale su cui è stato ricevuto il pacchetto. Il pacchetto ricevuto verrà messo in coda al ENetPacketPeer associato.
enum HostStatistic: 🔗
HostStatistic HOST_TOTAL_SENT_DATA = 0
Dati inviati in totale.
HostStatistic HOST_TOTAL_SENT_PACKETS = 1
Pacchetti UDP inviati in totale.
HostStatistic HOST_TOTAL_RECEIVED_DATA = 2
Dati ricevuti in totale.
HostStatistic HOST_TOTAL_RECEIVED_PACKETS = 3
Pacchetti UDP ricevuti in totale.
Descrizioni dei metodi
void bandwidth_limit(in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗
Regola i limiti di larghezza di banda di un host.
void broadcast(channel: int, packet: PackedByteArray, flags: int) 🔗
Mette in coda un pacchetto (packet) da inviare a tutti i peer associati all'host tramite il canale channel specificato. Vedi le costanti ENetPacketPeer FLAG_* per i flag dei pacchetti disponibili.
void channel_limit(limit: int) 🔗
Limita il numero massimo di canali consentiti per le future connessioni in entrata.
void compress(mode: CompressionMode) 🔗
Imposta il metodo di compressione utilizzato per i pacchetti di rete. Questi hanno diversi compromessi tra velocità di compressione e larghezza di banda, potresti dover testare quale funziona meglio per il tuo caso.
Nota: La progettazione di rete della maggior parte dei giochi prevede l'invio frequente di molti piccoli pacchetti (inferiori a 4 KB ciascuno). In caso di dubbi, si consiglia di mantenere l'algoritmo di compressione predefinito poiché funziona meglio su questi piccoli pacchetti.
Nota: La modalità di compressione deve essere impostata sullo stesso valore sia sul server sia su tutti i suoi client. I client non riusciranno a connettersi se la loro modalità di compressione impostata è diversa da quella impostata sul server.
ENetPacketPeer connect_to_host(address: String, port: int, channels: int = 0, data: int = 0) 🔗
Avvia una connessione all'indirizzo esterno address, utilizzando la porta port e allocando i canali channels. Un data facoltativo può essere passato durante la connessione sotto forma di un intero a 32 bit.
Nota: Bisogna chiamare create_host() o create_host_bound() su entrambi i lati prima di chiamare questo metodo.
Error create_host(max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗
Crea un ENetHost che consente fino a max_peers peer connessi, ognuno dei quali alloca fino a max_channels canali, limitando facoltativamente la larghezza di banda a in_bandwidth e out_bandwidth (se maggiori di zero).
Questo metodo associa una porta UDP dinamica casuale disponibile sulla macchina host all'indirizzo non specificato. Usa create_host_bound() per specificare l'indirizzo e la porta.
Nota: È necessario creare un host sia nel client sia nel server per stabilire una connessione.
Error create_host_bound(bind_address: String, bind_port: int, max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗
Crea un ENetHost associato all'indirizzo bind_address e porta bind_port specificati, che consente fino a max_peers peer connessi, ognuno dei quali alloca fino a max_channels canali, limitando facoltativamente la larghezza di banda a in_bandwidth e out_bandwidth (se maggiori di zero).
Nota: È necessario creare un host sia nel client sia nel server per stabilire una connessione.
void destroy() 🔗
Distrugge l'host e tutte le risorse associate ad esso.
Error dtls_client_setup(hostname: String, client_options: TLSOptions = null) 🔗
Configura questo ENetHost per usare l'estensione Godot personalizzata che consente la crittografia DTLS per i client ENet. Chiamalo prima di connect_to_host() per fare in modo che ENet si connetta usando DTLS, convalidando il certificato del server rispetto a hostname. È possibile passare facoltativamente client_options per personalizzare le autorità di certificazione attendibili o disabilitare la verifica del nome comune. Vedi TLSOptions.client() e TLSOptions.client_unsafe().
Error dtls_server_setup(server_options: TLSOptions) 🔗
Configure this ENetHost to use the custom Godot extension allowing DTLS encryption for ENet servers. Call this right after create_host_bound() to have ENet expect peers to connect using DTLS. See TLSOptions.server().
void flush() 🔗
Invia tutti i pacchetti in coda sull'host specificato ai peer designati.
Restituisce la porta locale a cui questo peer è associato.
int get_max_channels() const 🔗
Restituisce il numero massimo di canali consentiti per i peer connessi.
Array[ENetPacketPeer] get_peers() 🔗
Restituisce la lista dei peer associati a questo host.
Nota: Questa lista potrebbe includere alcuni peer che non sono completamente connessi o che si stanno disconnettendo.
float pop_statistic(statistic: HostStatistic) 🔗
Restituisce e reimposta le statistiche dell'host.
void refuse_new_connections(refuse: bool) 🔗
Configura il server DTLS per cancellare automaticamente le nuove connessioni.
Nota: Questo metodo è rilevante solo dopo aver chiamato dtls_server_setup().
Array service(timeout: int = 0) 🔗
Attende gli eventi su questa connessione e sposta i pacchetti tra l'host e i suoi peer, con il timeout fornito (in millisecondi). L'Array restituito avrà 4 elementi. Un EventType, l'ENetPacketPeer che ha generato l'evento, i dati associati all'evento (se presenti), il canale associato all'evento (se presente). Se l'evento generato è EVENT_RECEIVE, il pacchetto ricevuto verrà messo in coda all'ENetPacketPeer associato.
Chiama questa funzione regolarmente per gestire connessioni, disconnessioni e per ricevere nuovi pacchetti.
Nota: Questo metodo deve essere chiamato su entrambi i lati coinvolti nell'evento (host emittente e ricevente).
void socket_send(destination_address: String, destination_port: int, packet: PackedByteArray) 🔗
Invia il pacchetto packet verso una destinazione dall'indirizzo e dalla porta attualmente associati a questa istanza ENetConnection.
Ciò è utile in quanto serve a stabilire voci nelle tabelle di routing NAT su tutti i dispositivi tra questa istanza associata e Internet pubblico, consentendo ai pacchetti di connessione di un eventuale client di essere indirizzati all'indietro attraverso i dispositivi NAT tra Internet pubblico e questo host.
Ciò richiede sapere in anticipo l'indirizzo e la porta di comunicazione di un eventuale client come visti da Internet pubblico, dopo che tutti i dispositivi NAT hanno gestito la loro richiesta di connessione. È possibile ottenere queste informazioni da un servizio STUN e bisogna passarle al proprio host da un'entità che non sia l'eventuale client. Ciò non funzionerà mai per un client dietro un NAT simmetrico a causa della natura dell'algoritmo di routing NAT simmetrico, poiché non è possibile sapere in anticipo il loro IP e la loro porta.