Net
[Stabile: 2 - Stabile]
Stabile: 2 Stabilità: 2 - Stabile
Codice Sorgente: lib/net.js
Il modulo node:net
fornisce un'API di rete asincrona per la creazione di server TCP o IPC basati su stream (net.createServer()
) e client (net.createConnection()
).
È possibile accedervi utilizzando:
import net from 'node:net'
const net = require('node:net')
Supporto IPC
[Cronologia]
Versione | Modifiche |
---|---|
v20.8.0 | Supporto per il binding a un percorso socket di dominio Unix astratto come \0abstract . Possiamo associare '\0' per Node.js \< v20.4.0 . |
Il modulo node:net
supporta IPC con named pipe su Windows e socket di dominio Unix su altri sistemi operativi.
Identificazione dei percorsi per le connessioni IPC
net.connect()
, net.createConnection()
, server.listen()
e socket.connect()
accettano un parametro path
per identificare gli endpoint IPC.
Su Unix, il dominio locale è anche noto come dominio Unix. Il percorso è un percorso del file system. Genererà un errore quando la lunghezza del percorso è maggiore della lunghezza di sizeof(sockaddr_un.sun_path)
. I valori tipici sono 107 byte su Linux e 103 byte su macOS. Se un'astrazione API di Node.js crea il socket di dominio Unix, disconnetterà anche il socket di dominio Unix. Ad esempio, net.createServer()
potrebbe creare un socket di dominio Unix e server.close()
lo disconnetterà. Ma se un utente crea il socket di dominio Unix al di fuori di queste astrazioni, l'utente dovrà rimuoverlo. Lo stesso vale quando un'API Node.js crea un socket di dominio Unix, ma il programma si blocca. In breve, un socket di dominio Unix sarà visibile nel file system e persisterà fino alla disconnessione. Su Linux, è possibile utilizzare un socket astratto Unix aggiungendo \0
all'inizio del percorso, come \0abstract
. Il percorso del socket astratto Unix non è visibile nel file system e scompare automaticamente quando tutti i riferimenti aperti al socket vengono chiusi.
Su Windows, il dominio locale viene implementato utilizzando una named pipe. Il percorso deve fare riferimento a una voce in \\?\pipe\
o \\.\pipe\
. Sono consentiti tutti i caratteri, ma quest'ultimo potrebbe elaborare alcuni nomi di pipe, come la risoluzione delle sequenze ..
. Nonostante l'aspetto, lo spazio dei nomi della pipe è piatto. Le pipe non persistono. Vengono rimosse quando l'ultimo riferimento a esse viene chiuso. A differenza dei socket di dominio Unix, Windows chiuderà e rimuoverà la pipe quando il processo proprietario termina.
L'escape delle stringhe JavaScript richiede che i percorsi vengano specificati con un escape di backslash aggiuntivo, come ad esempio:
net.createServer().listen(path.join('\\\\?\\pipe', process.cwd(), 'myctl'))
Classe: net.BlockList
Aggiunto in: v15.0.0, v14.18.0
L'oggetto BlockList
può essere utilizzato con alcune API di rete per specificare regole per la disabilitazione dell'accesso in entrata o in uscita a indirizzi IP, intervalli IP o sottoreti IP specifiche.
blockList.addAddress(address[, type])
Aggiunto in: v15.0.0, v14.18.0
address
<string> | <net.SocketAddress> Un indirizzo IPv4 o IPv6.type
<string> Sia'ipv4'
che'ipv6'
. Predefinito:'ipv4'
.
Aggiunge una regola per bloccare l'indirizzo IP specificato.
blockList.addRange(start, end[, type])
Aggiunto in: v15.0.0, v14.18.0
start
<string> | <net.SocketAddress> L'indirizzo IPv4 o IPv6 iniziale nell'intervallo.end
<string> | <net.SocketAddress> L'indirizzo IPv4 o IPv6 finale nell'intervallo.type
<string> Sia'ipv4'
che'ipv6'
. Predefinito:'ipv4'
.
Aggiunge una regola per bloccare un intervallo di indirizzi IP da start
(incluso) a end
(incluso).
blockList.addSubnet(net, prefix[, type])
Aggiunto in: v15.0.0, v14.18.0
net
<string> | <net.SocketAddress> L'indirizzo di rete IPv4 o IPv6.prefix
<number> Il numero di bit del prefisso CIDR. Per IPv4, questo deve essere un valore compreso tra0
e32
. Per IPv6, questo deve essere compreso tra0
e128
.type
<string> Sia'ipv4'
che'ipv6'
. Predefinito:'ipv4'
.
Aggiunge una regola per bloccare un intervallo di indirizzi IP specificato come maschera di sottorete.
blockList.check(address[, type])
Aggiunto in: v15.0.0, v14.18.0
address
<stringa> | <net.SocketAddress> L'indirizzo IP da verificaretype
<stringa> O'ipv4'
o'ipv6'
. Predefinito:'ipv4'
.- Restituisce: <booleano>
Restituisce true
se l'indirizzo IP specificato corrisponde a una qualsiasi delle regole aggiunte alla BlockList
.
const blockList = new net.BlockList()
blockList.addAddress('123.123.123.123')
blockList.addRange('10.0.0.1', '10.0.0.10')
blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6')
console.log(blockList.check('123.123.123.123')) // Stampa: true
console.log(blockList.check('10.0.0.3')) // Stampa: true
console.log(blockList.check('222.111.111.222')) // Stampa: false
// La notazione IPv6 per gli indirizzi IPv4 funziona:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')) // Stampa: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')) // Stampa: true
blockList.rules
Aggiunto in: v15.0.0, v14.18.0
- Tipo: <stringa[]>
L'elenco delle regole aggiunte alla lista di blocco.
BlockList.isBlockList(value)
Aggiunto in: v23.4.0
value
<qualsiasi> Qualsiasi valore JS- Restituisce
true
sevalue
è unnet.BlockList
.
Classe: net.SocketAddress
Aggiunto in: v15.14.0, v14.18.0
new net.SocketAddress([options])
Aggiunto in: v15.14.0, v14.18.0
options
<Oggetto>
socketaddress.address
Aggiunto in: v15.14.0, v14.18.0
- Tipo <stringa>
socketaddress.family
Aggiunto in: v15.14.0, v14.18.0
- Tipo <stringa> Sia
'ipv4'
che'ipv6'
.
socketaddress.flowlabel
Aggiunto in: v15.14.0, v14.18.0
- Tipo <numero>
socketaddress.port
Aggiunto in: v15.14.0, v14.18.0
- Tipo <numero>
SocketAddress.parse(input)
Aggiunto in: v23.4.0
input
<stringa> Una stringa di input contenente un indirizzo IP e una porta opzionale, ad es.123.1.2.3:1234
o[1::1]:1234
.- Restituisce: <net.SocketAddress> Restituisce un
SocketAddress
se l'analisi è riuscita. Altrimenti restituisceundefined
.
Classe: net.Server
Aggiunto in: v0.1.90
- Estende: <EventEmitter>
Questa classe viene utilizzata per creare un server TCP o IPC.
new net.Server([options][, connectionListener])
options
<Oggetto> Vederenet.createServer([options][, connectionListener])
.connectionListener
<Funzione> Impostata automaticamente come listener per l'evento'connection'
.- Restituisce: <net.Server>
net.Server
è un EventEmitter
con i seguenti eventi:
Evento: 'close'
Aggiunto in: v0.5.0
Emesso quando il server si chiude. Se esistono connessioni, questo evento non viene emesso finché tutte le connessioni non vengono terminate.
Evento: 'connection'
Aggiunto in: v0.1.90
- <net.Socket> L'oggetto di connessione
Emesso quando viene effettuata una nuova connessione. socket
è un'istanza di net.Socket
.
Evento: 'error'
Aggiunto in: v0.1.90
Emesso quando si verifica un errore. A differenza di net.Socket
, l'evento 'close'
non verrà emesso direttamente dopo questo evento a meno che non venga chiamato manualmente server.close()
. Consulta l'esempio nella discussione di server.listen()
.
Evento: 'listening'
Aggiunto in: v0.1.90
Emesso quando il server è stato associato dopo aver chiamato server.listen()
.
Evento: 'drop'
Aggiunto in: v18.6.0, v16.17.0
Quando il numero di connessioni raggiunge la soglia di server.maxConnections
, il server rilascerà nuove connessioni ed emetterà invece l'evento 'drop'
. Se si tratta di un server TCP, l'argomento è il seguente, altrimenti l'argomento è undefined
.
data
<Object> L'argomento passato al listener dell'evento.
server.address()
[Cronologia]
Versione | Modifiche |
---|---|
v18.4.0 | La proprietà family ora restituisce una stringa anziché un numero. |
v18.0.0 | La proprietà family ora restituisce un numero anziché una stringa. |
v0.1.90 | Aggiunto in: v0.1.90 |
Restituisce l'address
associato, il nome della family
dell'indirizzo e la porta
del server come riportato dal sistema operativo se in ascolto su un socket IP (utile per trovare quale porta è stata assegnata quando si ottiene un indirizzo assegnato dal sistema operativo): { port: 12346, family: 'IPv4', address: '127.0.0.1' }
.
Per un server in ascolto su una pipe o un socket di dominio Unix, il nome viene restituito come una stringa.
const server = net
.createServer(socket => {
socket.end('arrivederci\n')
})
.on('error', err => {
// Gestisci gli errori qui.
throw err
})
// Ottieni una porta inutilizzata arbitraria.
server.listen(() => {
console.log('server aperto su', server.address())
})
server.address()
restituisce null
prima che l'evento 'listening'
sia stato emesso o dopo aver chiamato server.close()
.
server.close([callback])
Aggiunto in: v0.1.90
callback
<Funzione> Chiamata quando il server è chiuso.- Restituisce: <net.Server>
Interrompe l'accettazione di nuove connessioni da parte del server e mantiene le connessioni esistenti. Questa funzione è asincrona, il server viene finalmente chiuso quando tutte le connessioni sono terminate e il server emette un evento 'close'
. La callback
opzionale verrà chiamata una volta che si verifica l'evento 'close'
. A differenza di quell'evento, verrà chiamata con un Error
come unico argomento se il server non era aperto quando è stato chiuso.
server[Symbol.asyncDispose]()
Aggiunto in: v20.5.0, v18.18.0
[Stabile: 1 - Sperimentale]
Stabile: 1 Stabilità: 1 - Sperimentale
Chiama server.close()
e restituisce una promise che viene soddisfatta quando il server è stato chiuso.
server.getConnections(callback)
Aggiunto in: v0.9.7
callback
<Funzione>- Restituisce: <net.Server>
Ottiene in modo asincrono il numero di connessioni concorrenti sul server. Funziona quando i socket sono stati inviati a fork.
Il callback dovrebbe accettare due argomenti err
e count
.
server.listen()
Avvia un server in ascolto di connessioni. Un net.Server
può essere un server TCP o IPC a seconda di ciò che ascolta.
Possibili firme:
server.listen(handle[, backlog][, callback])
server.listen(options[, callback])
server.listen(path[, backlog][, callback])
per i server IPCserver.listen([port[, host[, backlog]]][, callback])
per i server TCP
Questa funzione è asincrona. Quando il server inizia l'ascolto, verrà emesso l'evento 'listening'
. L'ultimo parametro callback
verrà aggiunto come listener per l'evento 'listening'
.
Tutti i metodi listen()
possono accettare un parametro backlog
per specificare la lunghezza massima della coda di connessioni in sospeso. La lunghezza effettiva sarà determinata dal sistema operativo tramite le impostazioni sysctl come tcp_max_syn_backlog
e somaxconn
su Linux. Il valore predefinito di questo parametro è 511 (non 512).
Tutti i net.Socket
sono impostati su SO_REUSEADDR
(vedere socket(7)
per i dettagli).
Il metodo server.listen()
può essere chiamato di nuovo se e solo se si è verificato un errore durante la prima chiamata a server.listen()
o è stato chiamato server.close()
. In caso contrario, verrà generato un errore ERR_SERVER_ALREADY_LISTEN
.
Uno degli errori più comuni che si verificano durante l'ascolto è EADDRINUSE
. Questo accade quando un altro server è già in ascolto sulla porta
/percorso
/handle
richiesta. Un modo per gestire ciò potrebbe essere riprovare dopo un certo periodo di tempo:
server.on('error', e => {
if (e.code === 'EADDRINUSE') {
console.error('Indirizzo in uso, riprovo...')
setTimeout(() => {
server.close()
server.listen(PORT, HOST)
}, 1000)
}
})
server.listen(handle[, backlog][, callback])
Aggiunto in: v0.5.10
handle
<Object>backlog
<number> Parametro comune delle funzioniserver.listen()
callback
<Function>- Restituisce: <net.Server>
Avvia un server in ascolto di connessioni su un dato handle
che è già stato associato a una porta, un socket di dominio Unix o una named pipe di Windows.
L'oggetto handle
può essere un server, un socket (qualsiasi cosa con un membro _handle
sottostante) o un oggetto con un membro fd
che è un descrittore di file valido.
L'ascolto su un descrittore di file non è supportato in Windows.
server.listen(options[, callback])
[Cronologia]
Versione | Modifiche |
---|---|
v23.1.0 | L'opzione reusePort è supportata. |
v15.6.0 | È stato aggiunto il supporto per AbortSignal. |
v11.4.0 | L'opzione ipv6Only è supportata. |
v0.11.14 | Aggiunto in: v0.11.14 |
options
<Object> Richiesto. Supporta le seguenti proprietà:backlog
<number> Parametro comune delle funzioniserver.listen()
.exclusive
<boolean> Predefinito:false
host
<string>ipv6Only
<boolean> Per i server TCP, impostareipv6Only
sutrue
disabiliterà il supporto dual-stack, ovvero l'associazione all'host::
non farà sì che0.0.0.0
venga associato. Predefinito:false
.reusePort
<boolean> Per i server TCP, impostarereusePort
sutrue
consente a più socket sullo stesso host di associarsi alla stessa porta. Le connessioni in entrata vengono distribuite dal sistema operativo ai socket in ascolto. Questa opzione è disponibile solo su alcune piattaforme, come Linux 3.9+, DragonFlyBSD 3.6+, FreeBSD 12.0+, Solaris 11.4 e AIX 7.2.5+. Predefinito:false
.path
<string> Verrà ignorato se viene specificata laport
. Vedi Identificazione dei percorsi per le connessioni IPC.port
<number>readableAll
<boolean> Per i server IPC, rende la pipe leggibile per tutti gli utenti. Predefinito:false
.signal
<AbortSignal> Un AbortSignal che può essere utilizzato per chiudere un server in ascolto.writableAll
<boolean> Per i server IPC, rende la pipe scrivibile per tutti gli utenti. Predefinito:false
.
callback
<Function> funzioni.Restituisce: <net.Server>
Se viene specificata port
, si comporta allo stesso modo di server.listen([port[, host[, backlog]]][, callback])
. Altrimenti, se viene specificato path
, si comporta allo stesso modo di server.listen(path[, backlog][, callback])
. Se nessuno di essi viene specificato, verrà generato un errore.
Se exclusive
è false
(predefinito), i worker del cluster utilizzeranno lo stesso handle sottostante, consentendo la condivisione dei compiti di gestione delle connessioni. Quando exclusive
è true
, l'handle non è condiviso e il tentativo di condivisione della porta comporta un errore. Di seguito viene mostrato un esempio che ascolta su una porta esclusiva.
server.listen({
host: 'localhost',
port: 80,
exclusive: true,
})
Quando exclusive
è true
e l'handle sottostante è condiviso, è possibile che diversi worker interroghino un handle con backlog diversi. In questo caso, verrà utilizzato il primo backlog
passato al processo master.
L'avvio di un server IPC come root potrebbe rendere inaccessibile il percorso del server per gli utenti senza privilegi. L'utilizzo di readableAll
e writableAll
renderà il server accessibile a tutti gli utenti.
Se l'opzione signal
è abilitata, chiamare .abort()
sul corrispondente AbortController
è simile alla chiamata di .close()
sul server:
const controller = new AbortController()
server.listen({
host: 'localhost',
port: 80,
signal: controller.signal,
})
// In seguito, quando si desidera chiudere il server.
controller.abort()
server.listen(path[, backlog][, callback])
Aggiunto in: v0.1.90
path
<string> Percorso su cui il server deve essere in ascolto. Vedi Identificazione dei percorsi per le connessioni IPC.backlog
<number> Parametro comune delle funzioniserver.listen()
.callback
<Function>.- Restituisce: <net.Server>
Avvia un server IPC in ascolto delle connessioni sul path
specificato.
server.listen([port[, host[, backlog]]][, callback])
Aggiunto in: v0.1.90
port
<number>host
<string>backlog
<number> Parametro comune delle funzioniserver.listen()
.callback
<Function>.- Restituisce: <net.Server>
Avvia un server TCP in ascolto delle connessioni sulla port
e host
specificati.
Se port
viene omesso o è 0, il sistema operativo assegnerà una porta libera arbitraria, che può essere recuperata utilizzando server.address().port
dopo che l'evento 'listening'
è stato emesso.
Se host
viene omesso, il server accetterà le connessioni sull'indirizzo IPv6 non specificato (::
) quando IPv6 è disponibile, o sull'indirizzo IPv4 non specificato (0.0.0.0
) altrimenti.
Nella maggior parte dei sistemi operativi, l'ascolto sull'indirizzo IPv6 non specificato (::
) può far sì che net.Server
si metta in ascolto anche sull'indirizzo IPv4 non specificato (0.0.0.0
).
server.listening
Aggiunto in: v5.7.0
- <boolean> Indica se il server è in ascolto o meno per le connessioni.
server.maxConnections
[Cronologia]
Versione | Modifiche |
---|---|
v21.0.0 | Impostare maxConnections a 0 interrompe tutte le connessioni in entrata. In precedenza, veniva interpretato come Infinity . |
v0.2.0 | Aggiunto in: v0.2.0 |
Quando il numero di connessioni raggiunge la soglia server.maxConnections
:
Non è raccomandato utilizzare questa opzione una volta che un socket è stato inviato a un figlio con child_process.fork()
.
server.dropMaxConnection
Aggiunto in: v23.1.0
Imposta questa proprietà su true
per iniziare a chiudere le connessioni una volta che il numero di connessioni raggiunge la soglia [server.maxConnections
][]. Questa impostazione è efficace solo in modalità cluster.
server.ref()
Aggiunto in: v0.9.1
- Restituisce: <net.Server>
L'opposto di unref()
, chiamare ref()
su un server precedentemente unref
non permetterà al programma di uscire se è l'unico server rimasto (il comportamento predefinito). Se il server è ref
, chiamare di nuovo ref()
non avrà alcun effetto.
server.unref()
Aggiunto in: v0.9.1
- Restituisce: <net.Server>
Chiamare unref()
su un server permetterà al programma di uscire se questo è l'unico server attivo nel sistema di eventi. Se il server è già unref
, chiamare di nuovo unref()
non avrà alcun effetto.
Classe: net.Socket
Aggiunto in: v0.3.4
- Estende: <stream.Duplex>
Questa classe è un'astrazione di un socket TCP o di un endpoint IPC in streaming (utilizza named pipe su Windows e socket di dominio Unix altrimenti). È anche un EventEmitter
.
Un net.Socket
può essere creato dall'utente e utilizzato direttamente per interagire con un server. Ad esempio, viene restituito da net.createConnection()
, quindi l'utente può usarlo per comunicare con il server.
Può anche essere creato da Node.js e passato all'utente quando viene ricevuta una connessione. Ad esempio, viene passato agli ascoltatori di un evento 'connection'
emesso su un net.Server
, quindi l'utente può usarlo per interagire con il client.
new net.Socket([options])
[Cronologia]
Versione | Modifiche |
---|---|
v15.14.0 | Aggiunto il supporto per AbortSignal. |
v12.10.0 | Aggiunta l'opzione onread . |
v0.3.4 | Aggiunto in: v0.3.4 |
options
<Oggetto> Le opzioni disponibili sono:allowHalfOpen
<booleano> Se impostato sufalse
, il socket terminerà automaticamente il lato scrivibile quando termina il lato leggibile. Vederenet.createServer()
e l'evento'end'
per i dettagli. Predefinito:false
.fd
<numero> Se specificato, esegue il wrapping attorno a un socket esistente con il descrittore di file fornito, altrimenti verrà creato un nuovo socket.onread
<Oggetto> Se specificato, i dati in entrata vengono archiviati in un singolobuffer
e passati alcallback
fornito quando i dati arrivano sul socket. Ciò farà sì che la funzionalità di streaming non fornisca alcun dato. Il socket emetterà eventi come'error'
,'end'
e'close'
come di consueto. Anche metodi comepause()
eresume()
si comporteranno come previsto.buffer
<Buffer> | <Uint8Array> | <Funzione> Un blocco di memoria riutilizzabile da utilizzare per l'archiviazione dei dati in entrata o una funzione che restituisce tale blocco.callback
<Funzione> Questa funzione viene chiamata per ogni blocco di dati in entrata. Le vengono passati due argomenti: il numero di byte scritti nelbuffer
e un riferimento albuffer
. Restituirefalse
da questa funzione perpause()
implicitamente il socket. Questa funzione verrà eseguita nel contesto globale.readable
<booleano> Consente le letture sul socket quando viene passato unfd
, altrimenti viene ignorato. Predefinito:false
.signal
<AbortSignal> Un segnale di interruzione che può essere utilizzato per distruggere il socket.writable
<booleano> Consente le scritture sul socket quando viene passato unfd
, altrimenti viene ignorato. Predefinito:false
.
Restituisce: <net.Socket>
Crea un nuovo oggetto socket.
Il socket appena creato può essere un socket TCP o un endpoint IPC di streaming, a seconda di cosa si connect()
a.
Evento: 'close'
Aggiunto in: v0.1.90
hadError
<boolean>true
se il socket aveva un errore di trasmissione.
Emesso una volta che il socket è completamente chiuso. L'argomento hadError
è un valore booleano che indica se il socket è stato chiuso a causa di un errore di trasmissione.
Evento: 'connect'
Aggiunto in: v0.1.90
Emesso quando una connessione socket è stabilita con successo. Vedere net.createConnection()
.
Evento: 'connectionAttempt'
Aggiunto in: v21.6.0, v20.12.0
ip
<string> L'IP al quale il socket sta tentando di connettersi.port
<number> La porta alla quale il socket sta tentando di connettersi.family
<number> La famiglia dell'IP. Può essere6
per IPv6 o4
per IPv4.
Emesso quando viene avviato un nuovo tentativo di connessione. Questo può essere emesso più volte se l'algoritmo di selezione automatica della famiglia è abilitato in socket.connect(options)
.
Evento: 'connectionAttemptFailed'
Aggiunto in: v21.6.0, v20.12.0
ip
<string> L'IP al quale il socket ha tentato di connettersi.port
<number> La porta alla quale il socket ha tentato di connettersi.family
<number> La famiglia dell'IP. Può essere6
per IPv6 o4
per IPv4.error
<Error> L'errore associato al fallimento.
Emesso quando un tentativo di connessione è fallito. Questo può essere emesso più volte se l'algoritmo di selezione automatica della famiglia è abilitato in socket.connect(options)
.
Evento: 'connectionAttemptTimeout'
Aggiunto in: v21.6.0, v20.12.0
ip
<string> L'IP a cui il socket ha tentato di connettersi.port
<number> La porta a cui il socket ha tentato di connettersi.family
<number> La famiglia dell'IP. Può essere6
per IPv6 o4
per IPv4.
Emesso quando un tentativo di connessione è scaduto. Questo evento viene emesso (e può essere emesso più volte) solo se l'algoritmo di selezione automatica della famiglia è abilitato in socket.connect(options)
.
Evento: 'data'
Aggiunto in: v0.1.90
Emesso quando vengono ricevuti dati. L'argomento data
sarà un Buffer
o una String
. La codifica dei dati è impostata da socket.setEncoding()
.
I dati andranno persi se non è presente un listener quando un Socket
emette un evento 'data'
.
Evento: 'drain'
Aggiunto in: v0.1.90
Emesso quando il buffer di scrittura diventa vuoto. Può essere utilizzato per limitare gli upload.
Vedi anche: i valori di ritorno di socket.write()
.
Evento: 'end'
Aggiunto in: v0.1.90
Emesso quando l'altra estremità del socket segnala la fine della trasmissione, ponendo così fine al lato leggibile del socket.
Per impostazione predefinita (allowHalfOpen
è false
) il socket invierà un pacchetto di fine trasmissione e distruggerà il suo descrittore di file una volta che avrà scritto la sua coda di scrittura in sospeso. Tuttavia, se allowHalfOpen
è impostato su true
, il socket non eseguirà automaticamente end()
sul suo lato scrivibile, consentendo all'utente di scrivere quantità arbitrarie di dati. L'utente deve chiamare end()
esplicitamente per chiudere la connessione (cioè inviando un pacchetto FIN).
Evento: 'error'
Aggiunto in: v0.1.90
Emesso quando si verifica un errore. L'evento 'close'
sarà chiamato immediatamente dopo questo evento.
Evento: 'lookup'
[Cronologia]
Versione | Modifiche |
---|---|
v5.10.0 | Il parametro host è ora supportato. |
v0.11.3 | Aggiunto in: v0.11.3 |
Emesso dopo la risoluzione del nome host ma prima della connessione. Non applicabile ai socket Unix.
err
<Error> | <null> L'oggetto errore. Vederedns.lookup()
.address
<string> L'indirizzo IP.family
<number> | <null> Il tipo di indirizzo. Vederedns.lookup()
.host
<string> Il nome host.
Evento: 'ready'
Aggiunto in: v9.11.0
Emesso quando un socket è pronto per essere utilizzato.
Attivato immediatamente dopo 'connect'
.
Evento: 'timeout'
Aggiunto in: v0.1.90
Emesso se il socket va in timeout a causa dell'inattività. Questo serve solo a notificare che il socket è stato inattivo. L'utente deve chiudere manualmente la connessione.
Vedi anche: socket.setTimeout()
.
socket.address()
[Cronologia]
Versione | Modifiche |
---|---|
v18.4.0 | La proprietà family ora restituisce una stringa invece di un numero. |
v18.0.0 | La proprietà family ora restituisce un numero invece di una stringa. |
v0.1.90 | Aggiunto in: v0.1.90 |
- Restituisce: <Object>
Restituisce l'address
associato, il nome della family
dell'indirizzo e la port
del socket come riportato dal sistema operativo: { port: 12346, family: 'IPv4', address: '127.0.0.1' }
socket.autoSelectFamilyAttemptedAddresses
Aggiunto in: v19.4.0, v18.18.0
Questa proprietà è presente solo se l'algoritmo di autoselezione della famiglia è abilitato in socket.connect(options)
ed è un array degli indirizzi che sono stati tentati.
Ogni indirizzo è una stringa nella forma $IP:$PORT
. Se la connessione ha avuto successo, l'ultimo indirizzo è quello a cui il socket è attualmente connesso.
socket.bufferSize
Aggiunto in: v0.3.8
Deprecato da: v14.6.0
[Stabile: 0 - Deprecato]
Stabile: 0 Stabilità: 0 - Deprecato: Utilizzare invece writable.writableLength
.
Questa proprietà mostra il numero di caratteri memorizzati nel buffer per la scrittura. Il buffer può contenere stringhe la cui lunghezza dopo la codifica non è ancora nota. Quindi questo numero è solo un'approssimazione del numero di byte nel buffer.
net.Socket
ha la proprietà che socket.write()
funziona sempre. Questo per aiutare gli utenti a iniziare rapidamente. Il computer non può sempre tenere il passo con la quantità di dati che vengono scritti su un socket. La connessione di rete potrebbe essere semplicemente troppo lenta. Node.js accoderà internamente i dati scritti su un socket e li invierà via cavo quando possibile.
La conseguenza di questo buffering interno è che la memoria potrebbe crescere. Gli utenti che riscontrano bufferSize
grandi o in crescita dovrebbero tentare di "limitare" i flussi di dati nel loro programma con socket.pause()
e socket.resume()
.
socket.bytesRead
Aggiunto in: v0.5.3
La quantità di byte ricevuti.
socket.bytesWritten
Aggiunto in: v0.5.3
La quantità di byte inviati.
socket.connect()
Avvia una connessione su un socket specificato.
Possibili firme:
socket.connect(options[, connectListener])
socket.connect(path[, connectListener])
per le connessioni IPC.socket.connect(port[, host][, connectListener])
per le connessioni TCP.- Restituisce: <net.Socket> Il socket stesso.
Questa funzione è asincrona. Quando la connessione è stabilita, viene emesso l'evento 'connect'
. Se si verifica un problema durante la connessione, invece di un evento 'connect'
, viene emesso un evento 'error'
con l'errore passato all'ascoltatore 'error'
. L'ultimo parametro connectListener
, se fornito, verrà aggiunto come ascoltatore per l'evento 'connect'
una sola volta.
Questa funzione dovrebbe essere utilizzata solo per riconnettere un socket dopo che è stato emesso 'close'
o altrimenti potrebbe portare a un comportamento indefinito.
socket.connect(options[, connectListener])
[Cronologia]
Versione | Modifiche |
---|---|
v19.4.0 | Il valore predefinito per l'opzione autoSelectFamily può essere modificato a runtime utilizzando setDefaultAutoSelectFamily o tramite l'opzione della riga di comando --enable-network-family-autoselection . |
v20.0.0, v18.18.0 | Il valore predefinito per l'opzione autoSelectFamily è ora true. Il flag CLI --enable-network-family-autoselection è stato rinominato in --network-family-autoselection . Il vecchio nome è ora un alias, ma è sconsigliato. |
v19.3.0, v18.13.0 | Aggiunta l'opzione autoSelectFamily . |
v17.7.0, v16.15.0 | Le opzioni noDelay , keepAlive e keepAliveInitialDelay sono ora supportate. |
v6.0.0 | L'opzione hints ora è impostata per default a 0 in tutti i casi. In precedenza, in assenza dell'opzione family era impostata per default a `dns.ADDRCONFIG |
v5.11.0 | L'opzione hints è ora supportata. |
v0.1.90 | Aggiunto in: v0.1.90 |
options
<Object>connectListener
<Function> Parametro comune dei metodisocket.connect()
. Verrà aggiunto come ascoltatore per l'evento'connect'
una sola volta.- Restituisce: <net.Socket> Il socket stesso.
Avvia una connessione su un socket specificato. Normalmente questo metodo non è necessario, il socket dovrebbe essere creato e aperto con net.createConnection()
. Utilizzare questo solo quando si implementa un socket personalizzato.
Per le connessioni TCP, le options
disponibili sono:
autoSelectFamily
<boolean>: Se impostato sutrue
, abilita un algoritmo di auto-rilevamento della famiglia che implementa liberamente la sezione 5 della RFC 8305. L'opzioneall
passata a lookup è impostata sutrue
e i socket tentano di connettersi a tutti gli indirizzi IPv6 e IPv4 ottenuti, in sequenza, fino a quando non viene stabilita una connessione. Viene tentato per primo il primo indirizzo AAAA restituito, quindi il primo indirizzo A restituito, quindi il secondo indirizzo AAAA restituito e così via. A ciascun tentativo di connessione (ma non l'ultimo) viene assegnato il tempo specificato dall'opzioneautoSelectFamilyAttemptTimeout
prima che scada e venga provato l'indirizzo successivo. Ignorato se l'opzionefamily
non è0
o se è impostatolocalAddress
. Gli errori di connessione non vengono emessi se almeno una connessione riesce. Se tutti i tentativi di connessione falliscono, viene emesso un singoloAggregateError
con tutti i tentativi non riusciti. Default:net.getDefaultAutoSelectFamily()
.autoSelectFamilyAttemptTimeout
<number>: La quantità di tempo in millisecondi da attendere prima che un tentativo di connessione termini prima di provare l'indirizzo successivo quando si utilizza l'opzioneautoSelectFamily
. Se impostato su un numero intero positivo inferiore a10
, verrà utilizzato invece il valore10
. Default:net.getDefaultAutoSelectFamilyAttemptTimeout()
.family
<number>: Versione dello stack IP. Deve essere4
,6
o0
. Il valore0
indica che sono consentiti sia gli indirizzi IPv4 che IPv6. Default:0
.hints
<number> Opzionaledns.lookup()
suggerimenti.host
<string> Host a cui il socket deve connettersi. Default:'localhost'
.keepAlive
<boolean> Se impostato sutrue
, abilita la funzionalità keep-alive sul socket immediatamente dopo che la connessione è stabilita, in modo simile a quanto fatto insocket.setKeepAlive()
. Default:false
.keepAliveInitialDelay
<number> Se impostato su un numero positivo, imposta il ritardo iniziale prima che la prima sonda keepalive venga inviata su un socket inattivo. Default:0
.localAddress
<string> Indirizzo locale da cui il socket deve connettersi.localPort
<number> Porta locale da cui il socket deve connettersi.lookup
<Function> Funzione di ricerca personalizzata. Default:dns.lookup()
.noDelay
<boolean> Se impostato sutrue
, disabilita l'uso dell'algoritmo di Nagle immediatamente dopo che il socket è stabilito. Default:false
.port
<number> Obbligatorio. Porta a cui il socket deve connettersi.blockList
<net.BlockList>blockList
può essere utilizzato per disabilitare l'accesso in uscita a specifici indirizzi IP, intervalli IP o sottoreti IP.
Per le connessioni IPC, le options
disponibili sono:
path
<string> Obbligatorio. Percorso a cui il client deve connettersi. Vedere Identificazione dei percorsi per le connessioni IPC. Se fornito, le opzioni specifiche di TCP sopra sono ignorate.
socket.connect(path[, connectListener])
path
<stringa> Percorso a cui il client deve connettersi. Vedi Identificazione dei percorsi per le connessioni IPC.connectListener
<Funzione> Parametro comune dei metodisocket.connect()
. Verrà aggiunto come listener per l'evento'connect'
una volta.- Restituisce: <net.Socket> Il socket stesso.
Avvia una connessione IPC sul socket specificato.
Alias di socket.connect(options[, connectListener])
chiamato con { path: path }
come options
.
socket.connect(port[, host][, connectListener])
Aggiunto in: v0.1.90
port
<numero> Porta a cui il client deve connettersi.host
<stringa> Host a cui il client deve connettersi.connectListener
<Funzione> Parametro comune dei metodisocket.connect()
. Verrà aggiunto come listener per l'evento'connect'
una volta.- Restituisce: <net.Socket> Il socket stesso.
Avvia una connessione TCP sul socket specificato.
Alias di socket.connect(options[, connectListener])
chiamato con {port: port, host: host}
come options
.
socket.connecting
Aggiunto in: v6.1.0
Se true
, socket.connect(options[, connectListener])
è stato chiamato e non è ancora terminato. Rimarrà true
finché il socket non si connetterà, quindi viene impostato su false
e viene emesso l'evento 'connect'
. Si noti che la callback socket.connect(options[, connectListener])
è un listener per l'evento 'connect'
.
socket.destroy([error])
Aggiunto in: v0.1.90
error
<Object>- Restituisce: <net.Socket>
Assicura che non si verifichino più attività I/O su questo socket. Distrugge lo stream e chiude la connessione.
Vedi writable.destroy()
per ulteriori dettagli.
socket.destroyed
- <boolean> Indica se la connessione è distrutta o meno. Una volta distrutta una connessione, non è possibile trasferire ulteriori dati utilizzandola.
Vedi writable.destroyed
per ulteriori dettagli.
socket.destroySoon()
Aggiunto in: v0.3.4
Distrugge il socket dopo che tutti i dati sono stati scritti. Se l'evento 'finish'
è già stato emesso, il socket viene distrutto immediatamente. Se il socket è ancora scrivibile, chiama implicitamente socket.end()
.
socket.end([data[, encoding]][, callback])
Aggiunto in: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> Utilizzato solo quando i dati sonostring
. Predefinito:'utf8'
.callback
<Function> Callback opzionale per quando il socket ha terminato.- Restituisce: <net.Socket> Il socket stesso.
Chiude a metà il socket. Ovvero, invia un pacchetto FIN. È possibile che il server invii ancora alcuni dati.
Vedi writable.end()
per ulteriori dettagli.
socket.localAddress
Aggiunto in: v0.9.6
La rappresentazione stringa dell'indirizzo IP locale su cui si sta connettendo il client remoto. Ad esempio, in un server in ascolto su '0.0.0.0'
, se un client si connette su '192.168.1.1'
, il valore di socket.localAddress
sarebbe '192.168.1.1'
.
socket.localPort
Aggiunto in: v0.9.6
La rappresentazione numerica della porta locale. Per esempio, 80
o 21
.
socket.localFamily
Aggiunto in: v18.8.0, v16.18.0
La rappresentazione stringa della famiglia IP locale. 'IPv4'
o 'IPv6'
.
socket.pause()
- Restituisce: <net.Socket> Il socket stesso.
Mette in pausa la lettura dei dati. Cioè, gli eventi 'data'
non verranno emessi. Utile per ridurre un caricamento.
socket.pending
Aggiunto in: v11.2.0, v10.16.0
Questo è true
se il socket non è ancora connesso, o perché .connect()
non è stato ancora chiamato o perché è ancora in fase di connessione (vedi socket.connecting
).
socket.ref()
Aggiunto in: v0.9.1
- Restituisce: <net.Socket> Il socket stesso.
L'opposto di unref()
, chiamare ref()
su un socket precedentemente unref
non consentirà al programma di uscire se è l'unico socket rimasto (il comportamento predefinito). Se il socket è ref
chiamare di nuovo ref
non avrà alcun effetto.
socket.remoteAddress
Aggiunto in: v0.5.10
La rappresentazione stringa dell'indirizzo IP remoto. Per esempio, '74.125.127.100'
o '2001:4860:a005::68'
. Il valore può essere undefined
se il socket viene distrutto (per esempio, se il client si disconnette).
socket.remoteFamily
Aggiunto in: v0.11.14
La rappresentazione stringa della famiglia IP remota. 'IPv4'
o 'IPv6'
. Il valore può essere undefined
se il socket viene distrutto (per esempio, se il client si disconnette).
socket.remotePort
Aggiunto in: v0.5.10
La rappresentazione numerica della porta remota. Per esempio, 80
o 21
. Il valore può essere undefined
se il socket viene distrutto (per esempio, se il client si disconnette).
socket.resetAndDestroy()
Aggiunto in: v18.3.0, v16.17.0
- Restituisce: <net.Socket>
Chiude la connessione TCP inviando un pacchetto RST e distrugge lo stream. Se questo socket TCP è in stato di connessione, invierà un pacchetto RST e distruggerà questo socket TCP una volta connesso. Altrimenti, chiamerà socket.destroy
con un errore ERR_SOCKET_CLOSED
. Se questo non è un socket TCP (per esempio, una pipe), chiamare questo metodo genererà immediatamente un errore ERR_INVALID_HANDLE_TYPE
.
socket.resume()
- Restituisce: <net.Socket> Il socket stesso.
Riprende la lettura dopo una chiamata a socket.pause()
.
socket.setEncoding([encoding])
Aggiunto in: v0.1.90
encoding
<string>- Restituisce: <net.Socket> Il socket stesso.
Imposta la codifica per il socket come uno Stream Leggibile. Vedere readable.setEncoding()
per maggiori informazioni.
socket.setKeepAlive([enable][, initialDelay])
[Cronologia]
Versione | Modifiche |
---|---|
v13.12.0, v12.17.0 | Sono stati aggiunti nuovi valori predefiniti per le opzioni socket TCP_KEEPCNT e TCP_KEEPINTVL . |
v0.1.92 | Aggiunto in: v0.1.92 |
enable
<boolean> Predefinito:false
initialDelay
<number> Predefinito:0
- Restituisce: <net.Socket> Il socket stesso.
Abilita/disabilita la funzionalità keep-alive e, facoltativamente, imposta il ritardo iniziale prima che venga inviata la prima sonda keepalive su un socket inattivo.
Impostare initialDelay
(in millisecondi) per impostare il ritardo tra l'ultimo pacchetto di dati ricevuto e la prima sonda keepalive. Impostare 0
per initialDelay
lascerà il valore invariato rispetto all'impostazione predefinita (o precedente).
L'abilitazione della funzionalità keep-alive imposterà le seguenti opzioni del socket:
SO_KEEPALIVE=1
TCP_KEEPIDLE=initialDelay
TCP_KEEPCNT=10
TCP_KEEPINTVL=1
socket.setNoDelay([noDelay])
Aggiunto in: v0.1.90
noDelay
<boolean> Predefinito:true
- Restituisce: <net.Socket> Il socket stesso.
Abilita/disabilita l'uso dell'algoritmo di Nagle.
Quando viene creata una connessione TCP, l'algoritmo di Nagle sarà abilitato.
L'algoritmo di Nagle ritarda i dati prima che vengano inviati tramite la rete. Tenta di ottimizzare il throughput a scapito della latenza.
Passare true
per noDelay
o non passare un argomento disabiliterà l'algoritmo di Nagle per il socket. Passare false
per noDelay
abiliterà l'algoritmo di Nagle.
socket.setTimeout(timeout[, callback])
[Cronologia]
Versione | Modifiche |
---|---|
v18.0.0 | Passare una callback non valida all'argomento callback ora genera ERR_INVALID_ARG_TYPE invece di ERR_INVALID_CALLBACK . |
v0.1.90 | Aggiunto in: v0.1.90 |
timeout
<number>callback
<Function>- Restituisce: <net.Socket> Il socket stesso.
Imposta il socket in modo che scada dopo timeout
millisecondi di inattività sul socket. Per impostazione predefinita, net.Socket
non ha un timeout.
Quando viene attivato un timeout di inattività, il socket riceverà un evento 'timeout'
ma la connessione non verrà interrotta. L'utente deve chiamare manualmente socket.end()
o socket.destroy()
per terminare la connessione.
socket.setTimeout(3000)
socket.on('timeout', () => {
console.log('timeout del socket')
socket.end()
})
Se timeout
è 0, il timeout di inattività esistente viene disabilitato.
Il parametro opzionale callback
verrà aggiunto come listener una tantum per l'evento 'timeout'
.
socket.timeout
Aggiunto in: v10.7.0
Il timeout del socket in millisecondi impostato da socket.setTimeout()
. È undefined
se non è stato impostato un timeout.
socket.unref()
Aggiunto in: v0.9.1
- Restituisce: <net.Socket> Il socket stesso.
Chiamare unref()
su un socket consentirà al programma di terminare se questo è l'unico socket attivo nel sistema di eventi. Se il socket è già unref
, chiamare nuovamente unref()
non avrà alcun effetto.
socket.write(data[, encoding][, callback])
Aggiunto in: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> Utilizzato solo quando i dati sonostring
. Predefinito:utf8
.callback
<Function>- Restituisce: <boolean>
Invia i dati sul socket. Il secondo parametro specifica la codifica nel caso di una stringa. Il valore predefinito è la codifica UTF8.
Restituisce true
se tutti i dati sono stati scaricati correttamente nel buffer del kernel. Restituisce false
se tutti o parte dei dati sono stati accodati nella memoria utente. L'evento 'drain'
verrà emesso quando il buffer sarà di nuovo libero.
Il parametro opzionale callback
verrà eseguito quando i dati saranno finalmente scritti, il che potrebbe non essere immediato.
Vedi il metodo write()
dello stream Writable
per maggiori informazioni.
socket.readyState
Aggiunto in: v0.5.0
Questa proprietà rappresenta lo stato della connessione come una stringa.
- Se lo stream è in fase di connessione,
socket.readyState
èopening
. - Se lo stream è leggibile e scrivibile, è
open
. - Se lo stream è leggibile e non scrivibile, è
readOnly
. - Se lo stream non è leggibile e scrivibile, è
writeOnly
.
net.connect()
Alias per net.createConnection()
.
Possibili firme:
net.connect(options[, connectListener])
net.connect(path[, connectListener])
per connessioni IPC.net.connect(port[, host][, connectListener])
per connessioni TCP.
net.connect(options[, connectListener])
Aggiunto in: v0.7.0
options
<Object>connectListener
<Function>- Restituisce: <net.Socket>
Alias per net.createConnection(options[, connectListener])
.
net.connect(path[, connectListener])
Aggiunto in: v0.1.90
path
<string>connectListener
<Function>- Restituisce: <net.Socket>
Alias per net.createConnection(path[, connectListener])
.
net.connect(port[, host][, connectListener])
Aggiunto in: v0.1.90
port
<number>host
<string>connectListener
<Function>- Restituisce: <net.Socket>
Alias per net.createConnection(port[, host][, connectListener])
.
net.createConnection()
Una funzione factory, che crea un nuovo net.Socket
, avvia immediatamente la connessione con socket.connect()
, quindi restituisce il net.Socket
che avvia la connessione.
Quando la connessione è stabilita, verrà emesso un evento 'connect'
sul socket restituito. L'ultimo parametro connectListener
, se fornito, verrà aggiunto come listener per l'evento 'connect'
una sola volta.
Possibili firme:
net.createConnection(options[, connectListener])
net.createConnection(path[, connectListener])
per connessioni IPC.net.createConnection(port[, host][, connectListener])
per connessioni TCP.
La funzione net.connect()
è un alias per questa funzione.
net.createConnection(options[, connectListener])
Aggiunto in: v0.1.90
options
<Object> Obbligatorio. Verrà passato sia alla chiamatanew net.Socket([options])
che al metodosocket.connect(options[, connectListener])
.connectListener
<Function> Parametro comune delle funzioninet.createConnection()
. Se fornito, verrà aggiunto come listener per l'evento'connect'
sul socket restituito una sola volta.- Restituisce: <net.Socket> Il socket appena creato utilizzato per avviare la connessione.
Per le opzioni disponibili, vedere new net.Socket([options])
e socket.connect(options[, connectListener])
.
Opzioni aggiuntive:
timeout
<number> Se impostato, verrà utilizzato per chiamaresocket.setTimeout(timeout)
dopo la creazione del socket, ma prima che inizi la connessione.
Di seguito è riportato un esempio di client del server echo descritto nella sezione net.createServer()
:
import net from 'node:net'
const client = net.createConnection({ port: 8124 }, () => {
// listener 'connect'.
console.log('connesso al server!')
client.write('mondo!\r\n')
})
client.on('data', data => {
console.log(data.toString())
client.end()
})
client.on('end', () => {
console.log('disconnesso dal server')
})
const net = require('node:net')
const client = net.createConnection({ port: 8124 }, () => {
// listener 'connect'.
console.log('connesso al server!')
client.write('mondo!\r\n')
})
client.on('data', data => {
console.log(data.toString())
client.end()
})
client.on('end', () => {
console.log('disconnesso dal server')
})
Per connettersi sul socket /tmp/echo.sock
:
const client = net.createConnection({ path: '/tmp/echo.sock' })
Di seguito è riportato un esempio di client che utilizza l'opzione port
e onread
. In questo caso, l'opzione onread
verrà utilizzata solo per chiamare new net.Socket([options])
e l'opzione port
verrà utilizzata per chiamare socket.connect(options[, connectListener])
.
import net from 'node:net'
import { Buffer } from 'node:buffer'
net.createConnection({
port: 8124,
onread: {
// Riutilizza un Buffer da 4KiB per ogni lettura dal socket.
buffer: Buffer.alloc(4 * 1024),
callback: function (nread, buf) {
// I dati ricevuti sono disponibili in `buf` da 0 a `nread`.
console.log(buf.toString('utf8', 0, nread))
},
},
})
const net = require('node:net')
net.createConnection({
port: 8124,
onread: {
// Riutilizza un Buffer da 4KiB per ogni lettura dal socket.
buffer: Buffer.alloc(4 * 1024),
callback: function (nread, buf) {
// I dati ricevuti sono disponibili in `buf` da 0 a `nread`.
console.log(buf.toString('utf8', 0, nread))
},
},
})
net.createConnection(path[, connectListener])
Aggiunto in: v0.1.90
path
<stringa> Percorso a cui il socket deve connettersi. Sarà passato asocket.connect(path[, connectListener])
. Vedere Identificazione dei percorsi per le connessioni IPC.connectListener
<Funzione> Parametro comune delle funzioninet.createConnection()
, un listener "once" per l'evento'connect'
sul socket di avvio. Sarà passato asocket.connect(path[, connectListener])
.- Restituisce: <net.Socket> Il socket appena creato utilizzato per avviare la connessione.
Avvia una connessione IPC.
Questa funzione crea un nuovo net.Socket
con tutte le opzioni impostate al valore predefinito, avvia immediatamente la connessione con socket.connect(path[, connectListener])
, quindi restituisce il net.Socket
che avvia la connessione.
net.createConnection(port[, host][, connectListener])
Aggiunto in: v0.1.90
port
<numero> Porta a cui il socket deve connettersi. Sarà passato asocket.connect(port[, host][, connectListener])
.host
<stringa> Host a cui il socket deve connettersi. Sarà passato asocket.connect(port[, host][, connectListener])
. Predefinito:'localhost'
.connectListener
<Funzione> Parametro comune delle funzioninet.createConnection()
, un listener "once" per l'evento'connect'
sul socket di avvio. Sarà passato asocket.connect(port[, host][, connectListener])
.- Restituisce: <net.Socket> Il socket appena creato utilizzato per avviare la connessione.
Avvia una connessione TCP.
Questa funzione crea un nuovo net.Socket
con tutte le opzioni impostate al valore predefinito, avvia immediatamente la connessione con socket.connect(port[, host][, connectListener])
, quindi restituisce il net.Socket
che avvia la connessione.
net.createServer([options][, connectionListener])
[Cronologia]
Versione | Modifiche |
---|---|
v20.1.0, v18.17.0 | L'opzione highWaterMark è ora supportata. |
v17.7.0, v16.15.0 | Le opzioni noDelay , keepAlive e keepAliveInitialDelay sono ora supportate. |
v0.5.0 | Aggiunto in: v0.5.0 |
options
<Object>allowHalfOpen
<boolean> Se impostato sufalse
, il socket terminerà automaticamente il lato scrivibile quando termina il lato leggibile. Predefinito:false
.highWaterMark
<number> Sovrascrive facoltativamente tutti ireadableHighWaterMark
ewritableHighWaterMark
dinet.Socket
. Predefinito: Vedistream.getDefaultHighWaterMark()
.keepAlive
<boolean> Se impostato sutrue
, abilita la funzionalità keep-alive sul socket immediatamente dopo la ricezione di una nuova connessione in entrata, in modo simile a quanto fatto insocket.setKeepAlive()
. Predefinito:false
.keepAliveInitialDelay
<number> Se impostato su un numero positivo, imposta il ritardo iniziale prima che venga inviata la prima sonda keepalive su un socket inattivo. Predefinito:0
.noDelay
<boolean> Se impostato sutrue
, disabilita l'uso dell'algoritmo di Nagle immediatamente dopo la ricezione di una nuova connessione in entrata. Predefinito:false
.pauseOnConnect
<boolean> Indica se il socket deve essere messo in pausa sulle connessioni in entrata. Predefinito:false
.blockList
<net.BlockList>blockList
può essere utilizzato per disabilitare l'accesso in entrata a indirizzi IP, intervalli IP o sottoreti IP specifici. Questo non funziona se il server si trova dietro un proxy inverso, un NAT, ecc. perché l'indirizzo verificato rispetto alla lista di blocco è l'indirizzo del proxy o quello specificato dal NAT.
connectionListener
<Function> Impostato automaticamente come listener per l'evento'connection'
.Restituisce: <net.Server>
Crea un nuovo server TCP o IPC.
Se allowHalfOpen
è impostato su true
, quando l'altra estremità del socket segnala la fine della trasmissione, il server invierà la fine della trasmissione solo quando viene esplicitamente chiamato socket.end()
. Ad esempio, nel contesto di TCP, quando viene ricevuto un pacchetto FIN, viene inviato un pacchetto FIN solo quando socket.end()
viene chiamato esplicitamente. Fino ad allora la connessione è semi-chiusa (non leggibile ma ancora scrivibile). Vedi l'evento 'end'
e RFC 1122 (sezione 4.2.2.13) per maggiori informazioni.
Se pauseOnConnect
è impostato su true
, il socket associato a ciascuna connessione in entrata verrà messo in pausa e nessun dato verrà letto dal suo handle. Ciò consente di passare le connessioni tra i processi senza che il processo originale legga alcun dato. Per iniziare a leggere i dati da un socket in pausa, chiama socket.resume()
.
Il server può essere un server TCP o un server IPC, a seconda di cosa listen()
.
Ecco un esempio di server eco TCP che ascolta le connessioni sulla porta 8124:
import net from 'node:net'
const server = net.createServer(c => {
// listener 'connection'.
console.log('client connesso')
c.on('end', () => {
console.log('client disconnesso')
})
c.write('ciao\r\n')
c.pipe(c)
})
server.on('error', err => {
throw err
})
server.listen(8124, () => {
console.log('server associato')
})
const net = require('node:net')
const server = net.createServer(c => {
// listener 'connection'.
console.log('client connesso')
c.on('end', () => {
console.log('client disconnesso')
})
c.write('ciao\r\n')
c.pipe(c)
})
server.on('error', err => {
throw err
})
server.listen(8124, () => {
console.log('server associato')
})
Testa questo usando telnet
:
telnet localhost 8124
Per ascoltare il socket /tmp/echo.sock
:
server.listen('/tmp/echo.sock', () => {
console.log('server associato')
})
Utilizza nc
per connetterti a un server socket di dominio Unix:
nc -U /tmp/echo.sock
net.getDefaultAutoSelectFamily()
Aggiunto in: v19.4.0
Ottiene il valore predefinito corrente dell'opzione autoSelectFamily
di socket.connect(options)
. Il valore predefinito iniziale è true
, a meno che non venga fornita l'opzione da riga di comando --no-network-family-autoselection
.
- Restituisce: <boolean> Il valore predefinito corrente dell'opzione
autoSelectFamily
.
net.setDefaultAutoSelectFamily(value)
Aggiunto in: v19.4.0
Imposta il valore predefinito dell'opzione autoSelectFamily
di socket.connect(options)
.
value
<boolean> Il nuovo valore predefinito. Il valore predefinito iniziale ètrue
, a meno che non venga fornita l'opzione da riga di comando--no-network-family-autoselection
.
net.getDefaultAutoSelectFamilyAttemptTimeout()
Aggiunto in: v19.8.0, v18.18.0
Ottiene il valore predefinito corrente dell'opzione autoSelectFamilyAttemptTimeout
di socket.connect(options)
. Il valore predefinito iniziale è 250
o il valore specificato tramite l'opzione da riga di comando --network-family-autoselection-attempt-timeout
.
- Restituisce: <number> Il valore predefinito corrente dell'opzione
autoSelectFamilyAttemptTimeout
.
net.setDefaultAutoSelectFamilyAttemptTimeout(value)
Aggiunto in: v19.8.0, v18.18.0
Imposta il valore predefinito dell'opzione autoSelectFamilyAttemptTimeout
di socket.connect(options)
.
value
<number> Il nuovo valore predefinito, che deve essere un numero positivo. Se il numero è inferiore a10
, viene utilizzato invece il valore10
. Il valore predefinito iniziale è250
o il valore specificato tramite l'opzione da riga di comando--network-family-autoselection-attempt-timeout
.
net.isIP(input)
Aggiunto in: v0.3.0
Restituisce 6
se input
è un indirizzo IPv6. Restituisce 4
se input
è un indirizzo IPv4 in notazione decimale puntata senza zeri iniziali. Altrimenti, restituisce 0
.
net.isIP('::1') // restituisce 6
net.isIP('127.0.0.1') // restituisce 4
net.isIP('127.000.000.001') // restituisce 0
net.isIP('127.0.0.1/24') // restituisce 0
net.isIP('fhqwhgads') // restituisce 0
net.isIPv4(input)
Aggiunto in: v0.3.0
Restituisce true
se input
è un indirizzo IPv4 in notazione decimale puntata senza zeri iniziali. Altrimenti, restituisce false
.
net.isIPv4('127.0.0.1') // restituisce true
net.isIPv4('127.000.000.001') // restituisce false
net.isIPv4('127.0.0.1/24') // restituisce false
net.isIPv4('fhqwhgads') // restituisce false
net.isIPv6(input)
Aggiunto in: v0.3.0
Restituisce true
se input
è un indirizzo IPv6. Altrimenti, restituisce false
.
net.isIPv6('::1') // restituisce true
net.isIPv6('fhqwhgads') // restituisce false