Net
[Стабильно: 2 - Стабильно]
Стабильно: 2 Стабильность: 2 - Стабильно
Исходный код: lib/net.js
Модуль node:net
предоставляет асинхронный сетевой API для создания потоковых TCP-серверов или серверов IPC (net.createServer()
) и клиентов (net.createConnection()
).
Доступ к нему можно получить с помощью:
import net from 'node:net'
const net = require('node:net')
Поддержка IPC
[История]
Версия | Изменения |
---|---|
v20.8.0 | Поддержка привязки к абстрактному пути сокета Unix-домена, например \0abstract . Можно привязаться к '\0' для Node.js \< v20.4.0 . |
Модуль node:net
поддерживает IPC с именованными каналами в Windows и сокетами Unix-домена в других операционных системах.
Идентификация путей для IPC-соединений
net.connect()
, net.createConnection()
, server.listen()
и socket.connect()
принимают параметр path
для идентификации конечных точек IPC.
В Unix локальная область также известна как область Unix. Путь представляет собой имя файла в файловой системе. Возникнет ошибка, если длина имени пути превышает длину sizeof(sockaddr_un.sun_path)
. Типичные значения составляют 107 байт в Linux и 103 байта в macOS. Если абстракция API Node.js создает сокет Unix-домена, она также отвяжет сокет Unix-домена. Например, net.createServer()
может создать сокет Unix-домена, а server.close()
отвяжет его. Но если пользователь создает сокет Unix-домена вне этих абстракций, пользователю потребуется удалить его. То же самое относится к случаю, когда API Node.js создает сокет Unix-домена, но программа затем аварийно завершается. Короче говоря, сокет Unix-домена будет виден в файловой системе и будет существовать до тех пор, пока не будет отвязан. В Linux можно использовать абстрактный сокет Unix, добавив \0
в начало пути, например \0abstract
. Путь к абстрактному сокету Unix не виден в файловой системе, и он исчезнет автоматически, когда будут закрыты все открытые ссылки на сокет.
В Windows локальная область реализована с помощью именованного канала. Путь должен ссылаться на запись в \\?\pipe\
или \\.\pipe\
. Допускаются любые символы, но последний может выполнять некоторую обработку имен каналов, например, разрешение последовательностей ..
. Несмотря на то, как это может выглядеть, пространство имен каналов является плоским. Каналы не будут сохраняться. Они удаляются, когда закрывается последняя ссылка на них. В отличие от сокетов Unix-домена, Windows закроет и удалит канал при выходе владеющего процесса.
Для экранирования строк JavaScript пути необходимо указывать с дополнительным экранированием обратной косой черты, например:
net.createServer().listen(path.join('\\\\?\\pipe', process.cwd(), 'myctl'))
Класс: net.BlockList
Добавлено в: v15.0.0, v14.18.0
Объект BlockList
может использоваться с некоторыми сетевыми API для указания правил отключения входящего или исходящего доступа к определенным IP-адресам, диапазонам IP-адресов или IP-подсетям.
blockList.addAddress(address[, type])
Добавлено в: v15.0.0, v14.18.0
address
<string> | <net.SocketAddress> IPv4 или IPv6 адрес.type
<string> Либо'ipv4'
, либо'ipv6'
. По умолчанию:'ipv4'
.
Добавляет правило для блокировки заданного IP-адреса.
blockList.addRange(start, end[, type])
Добавлено в: v15.0.0, v14.18.0
start
<string> | <net.SocketAddress> Начальный IPv4 или IPv6 адрес в диапазоне.end
<string> | <net.SocketAddress> Конечный IPv4 или IPv6 адрес в диапазоне.type
<string> Либо'ipv4'
, либо'ipv6'
. По умолчанию:'ipv4'
.
Добавляет правило для блокировки диапазона IP-адресов от start
(включительно) до end
(включительно).
blockList.addSubnet(net, prefix[, type])
Добавлено в: v15.0.0, v14.18.0
net
<string> | <net.SocketAddress> Сетевой IPv4 или IPv6 адрес.prefix
<number> Количество бит префикса CIDR. Для IPv4 это должно быть значение от0
до32
. Для IPv6 это должно быть значение от0
до128
.type
<string> Либо'ipv4'
, либо'ipv6'
. По умолчанию:'ipv4'
.
Добавляет правило для блокировки диапазона IP-адресов, указанного как маска подсети.
blockList.check(address[, type])
Добавлен в: v15.0.0, v14.18.0
address
<string> | <net.SocketAddress> IP-адрес для проверкиtype
<string>'ipv4'
или'ipv6'
. По умолчанию:'ipv4'
.- Возвращает: <boolean>
Возвращает true
, если заданный IP-адрес соответствует любому из правил, добавленных в 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')) // Выводит: true
console.log(blockList.check('10.0.0.3')) // Выводит: true
console.log(blockList.check('222.111.111.222')) // Выводит: false
// Запись IPv6 для IPv4 адресов работает:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')) // Выводит: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')) // Выводит: true
blockList.rules
Добавлен в: v15.0.0, v14.18.0
- Тип: <string[]>
Список правил, добавленных в черный список.
BlockList.isBlockList(value)
Добавлен в: v23.4.0
value
<any> Любое значение JS- Возвращает
true
, еслиvalue
являетсяnet.BlockList
.
Класс: net.SocketAddress
Добавлен в: v15.14.0, v14.18.0
new net.SocketAddress([options])
Добавлен в: v15.14.0, v14.18.0
options
<Object>
socketaddress.address
Добавлено в: v15.14.0, v14.18.0
- Тип <string>
socketaddress.family
Добавлено в: v15.14.0, v14.18.0
- Тип <string> Либо
'ipv4'
, либо'ipv6'
.
socketaddress.flowlabel
Добавлено в: v15.14.0, v14.18.0
- Тип <number>
socketaddress.port
Добавлено в: v15.14.0, v14.18.0
- Тип <number>
SocketAddress.parse(input)
Добавлено в: v23.4.0
input
<string> Входная строка, содержащая IP-адрес и необязательный порт, например,123.1.2.3:1234
или[1::1]:1234
.- Возвращает: <net.SocketAddress> Возвращает
SocketAddress
, если разбор был успешным. В противном случае возвращаетundefined
.
Класс: net.Server
Добавлено в: v0.1.90
- Расширяет: <EventEmitter>
Этот класс используется для создания TCP или IPC сервера.
new net.Server([options][, connectionListener])
options
<Object> См.net.createServer([options][, connectionListener])
.connectionListener
<Function> Автоматически устанавливается в качестве прослушивателя события'connection'
.- Возвращает: <net.Server>
net.Server
является EventEmitter
со следующими событиями:
Событие: 'close'
Добавлено в: v0.5.0
Генерируется при закрытии сервера. Если существуют соединения, это событие не генерируется до тех пор, пока все соединения не будут завершены.
Событие: 'connection'
Добавлено в: v0.1.90
- <net.Socket> Объект соединения
Генерируется при установлении нового соединения. socket
— это экземпляр net.Socket
.
Событие: 'error'
Добавлено в: v0.1.90
Генерируется при возникновении ошибки. В отличие от net.Socket
, событие 'close'
не будет генерироваться непосредственно после этого события, если только server.close()
не будет вызвано вручную. См. пример в обсуждении server.listen()
.
Событие: 'listening'
Добавлено в: v0.1.90
Генерируется после привязки сервера после вызова server.listen()
.
Событие: 'drop'
Добавлено в: v18.6.0, v16.17.0
Когда количество соединений достигает порога server.maxConnections
, сервер будет отклонять новые соединения и генерировать событие 'drop'
. Если это TCP-сервер, аргумент будет следующим, в противном случае аргумент будет undefined
.
data
<Object> Аргумент, передаваемый обработчику событий.
server.address()
[История]
Версия | Изменения |
---|---|
v18.4.0 | Свойство family теперь возвращает строку, а не число. |
v18.0.0 | Свойство family теперь возвращает число, а не строку. |
v0.1.90 | Добавлено в: v0.1.90 |
Возвращает привязанный address
, имя семейства адресов family
и port
сервера, как сообщается операционной системой, если прослушивание происходит на IP-сокете (полезно для того, чтобы узнать, какой порт был назначен при получении адреса, назначенного ОС): { port: 12346, family: 'IPv4', address: '127.0.0.1' }
.
Для сервера, прослушивающего именованный канал или сокет домена Unix, имя возвращается как строка.
const server = net
.createServer(socket => {
socket.end('goodbye\n')
})
.on('error', err => {
// Обработка ошибок здесь.
throw err
})
// Захват произвольного неиспользуемого порта.
server.listen(() => {
console.log('opened server on', server.address())
})
server.address()
возвращает null
до того, как событие 'listening'
было отправлено, или после вызова server.close()
.
server.close([callback])
Добавлено в: v0.1.90
callback
<Function> Вызывается при закрытии сервера.- Возвращает: <net.Server>
Останавливает сервер от принятия новых подключений и сохраняет существующие подключения. Эта функция асинхронна, сервер окончательно закрывается, когда все подключения завершены, и сервер отправляет событие 'close'
. Необязательный callback
будет вызван после того, как произойдет событие 'close'
. В отличие от этого события, он будет вызван с Error
в качестве единственного аргумента, если сервер не был открыт, когда он был закрыт.
server[Symbol.asyncDispose]()
Добавлено в: v20.5.0, v18.18.0
[Стабильно: 1 - Экспериментально]
Стабильно: 1 Стабильность: 1 - Экспериментально
Вызывает server.close()
и возвращает promise, который выполняется после закрытия сервера.
server.getConnections(callback)
Добавлено в: v0.9.7
callback
<Function>- Возвращает: <net.Server>
Асинхронно получает количество одновременных подключений к серверу. Работает, когда сокеты были отправлены в forks.
Обратный вызов должен принимать два аргумента err
и count
.
server.listen()
Запускает прослушивание сервером подключений. net.Server
может быть TCP или IPC сервером в зависимости от того, что он прослушивает.
Возможные сигнатуры:
server.listen(handle[, backlog][, callback])
server.listen(options[, callback])
server.listen(path[, backlog][, callback])
для IPC серверовserver.listen([port[, host[, backlog]]][, callback])
для TCP серверов
Эта функция асинхронна. Когда сервер начнет прослушивание, будет вызвано событие 'listening'
. Последний параметр callback
будет добавлен как слушатель события 'listening'
.
Все методы listen()
могут принимать параметр backlog
для указания максимальной длины очереди ожидающих подключений. Фактическая длина будет определяться ОС через настройки sysctl, такие как tcp_max_syn_backlog
и somaxconn
в Linux. Значение по умолчанию этого параметра равно 511 (а не 512).
Все net.Socket
устанавливаются на SO_REUSEADDR
(см. socket(7)
для подробностей).
Метод server.listen()
может быть вызван повторно только в том случае, если произошла ошибка во время первого вызова server.listen()
или был вызван server.close()
. В противном случае будет выброшена ошибка ERR_SERVER_ALREADY_LISTEN
.
Одной из наиболее распространенных ошибок, возникающих при прослушивании, является EADDRINUSE
. Это происходит, когда другой сервер уже прослушивает указанный port
/path
/handle
. Один из способов обработки этого — повторить попытку через некоторое время:
server.on('error', e => {
if (e.code === 'EADDRINUSE') {
console.error('Адрес используется, повторяю попытку...')
setTimeout(() => {
server.close()
server.listen(PORT, HOST)
}, 1000)
}
})
server.listen(handle[, backlog][, callback])
Добавлен в: v0.5.10
handle
<Object>backlog
<number> Обычный параметр функцийserver.listen()
callback
<Function>- Возвращает: <net.Server>
Запускает сервер, прослушивающий подключения на заданном handle
, который уже был привязан к порту, сокету домена Unix или именованному каналу Windows.
Объект handle
может быть сервером, сокетом (любым объектом с базовым членом _handle
) или объектом с членом fd
, который является действительным дескриптором файла.
Прослушивание дескриптора файла не поддерживается в Windows.
server.listen(options[, callback])
[История]
Версия | Изменения |
---|---|
v23.1.0 | Поддерживается опция reusePort . |
v15.6.0 | Добавлена поддержка AbortSignal. |
v11.4.0 | Поддерживается опция ipv6Only . |
v0.11.14 | Добавлено в: v0.11.14 |
options
<Object> Обязательно. Поддерживает следующие свойства:backlog
<number> Обычный параметр функцийserver.listen()
.exclusive
<boolean> По умолчанию:false
host
<string>ipv6Only
<boolean> Для TCP-серверов установкаipv6Only
вtrue
отключит поддержку двойного стека, т. е. привязка к хосту::
не приведет к привязке0.0.0.0
. По умолчанию:false
.reusePort
<boolean> Для TCP-серверов установкаreusePort
вtrue
позволяет нескольким сокетам на одном хосте привязываться к одному и тому же порту. Входящие подключения распределяются операционной системой между прослушивающими сокетами. Эта опция доступна только на некоторых платформах, таких как Linux 3.9+, DragonFlyBSD 3.6+, FreeBSD 12.0+, Solaris 11.4 и AIX 7.2.5+. По умолчанию:false
.path
<string> Будет игнорироваться, если указанport
. См. Идентификация путей для IPC-подключений.port
<number>readableAll
<boolean> Для IPC-серверов делает канал доступным для чтения для всех пользователей. По умолчанию:false
.signal
<AbortSignal> AbortSignal, который может использоваться для закрытия прослушивающего сервера.writableAll
<boolean> Для IPC-серверов делает канал доступным для записи для всех пользователей. По умолчанию:false
.
callback
<Function> функции.Возвращает: <net.Server>
Если указан port
, он ведет себя так же, как server.listen([port[, host[, backlog]]][, callback])
. В противном случае, если указан path
, он ведет себя так же, как server.listen(path[, backlog][, callback])
. Если ни один из них не указан, будет выброшена ошибка.
Если exclusive
имеет значение false
(по умолчанию), то рабочие процессы кластера будут использовать один и тот же базовый обработчик, что позволит совместно использовать обязанности по обработке подключений. Когда exclusive
имеет значение true
, обработчик не используется совместно, и попытка совместного использования порта приводит к ошибке. Пример прослушивания на эксклюзивном порту показан ниже.
server.listen({
host: 'localhost',
port: 80,
exclusive: true,
})
Когда exclusive
имеет значение true
, и базовый обработчик используется совместно, возможно, что несколько рабочих процессов запрашивают обработчик с разными значениями backlog
. В этом случае будет использоваться первое значение backlog
, переданное главному процессу.
Запуск IPC-сервера от имени root может привести к тому, что путь к серверу станет недоступен для пользователей без прав. Использование readableAll
и writableAll
сделает сервер доступным для всех пользователей.
Если включена опция signal
, вызов .abort()
для соответствующего AbortController
аналогичен вызову .close()
для сервера:
const controller = new AbortController()
server.listen({
host: 'localhost',
port: 80,
signal: controller.signal,
})
// Позже, когда вы захотите закрыть сервер.
controller.abort()
server.listen(path[, backlog][, callback])
Добавлено в: v0.1.90
path
<string> Путь, к которому должен прислушиваться сервер. См. Идентификация путей для IPC-соединений.backlog
<number> Обычный параметр функцийserver.listen()
.callback
<Function>.- Возвращает: <net.Server>
Запуск IPC-сервера, прослушивающего соединения по указанному path
.
server.listen([port[, host[, backlog]]][, callback])
Добавлено в: v0.1.90
port
<number>host
<string>backlog
<number> Обычный параметр функцийserver.listen()
.callback
<Function>.- Возвращает: <net.Server>
Запуск TCP-сервера, прослушивающего соединения на указанном port
и host
.
Если port
пропущен или равен 0, операционная система назначит произвольный неиспользуемый порт, который можно получить с помощью server.address().port
после того, как событие 'listening'
будет испущено.
Если host
пропущен, сервер будет принимать соединения по неуказанному IPv6-адресу (::
), если доступен IPv6, или по неуказанному IPv4-адресу (0.0.0.0
) в противном случае.
В большинстве операционных систем прослушивание неуказанного IPv6-адреса (::
) может привести к тому, что net.Server
также будет прослушивать неуказанный IPv4-адрес (0.0.0.0
).
server.listening
Добавлено в: v5.7.0
- <boolean> Указывает, ожидает ли сервер подключения.
server.maxConnections
[История]
Версия | Изменения |
---|---|
v21.0.0 | Установка maxConnections в 0 отключает все входящие соединения. Ранее это интерпретировалось как Infinity . |
v0.2.0 | Добавлено в: v0.2.0 |
Когда количество соединений достигает порога server.maxConnections
:
Не рекомендуется использовать этот параметр после отправки сокета дочернему процессу с помощью child_process.fork()
.
server.dropMaxConnection
Добавлено в: v23.1.0
Установите это свойство в true
, чтобы начать закрывать соединения, как только количество соединений достигнет порога [server.maxConnections
][]. Эта настройка эффективна только в кластерном режиме.
server.ref()
Добавлено в: v0.9.1
- Возвращает: <net.Server>
Противоположность unref()
. Вызов ref()
для ранее unref
ed сервера не позволит программе завершиться, если это единственный оставшийся сервер (поведение по умолчанию). Если сервер ref
ed, повторный вызов ref()
не будет иметь никакого эффекта.
server.unref()
Добавлено в: v0.9.1
- Возвращает: <net.Server>
Вызов unref()
для сервера позволит программе завершиться, если это единственный активный сервер в системе событий. Если сервер уже unref
ed, повторный вызов unref()
не будет иметь никакого эффекта.
Класс: net.Socket
Добавлено в: v0.3.4
- Расширяет: <stream.Duplex>
Этот класс является абстракцией TCP-сокета или конечной точки потокового IPC (использует именованные каналы в Windows и Unix-сокеты домена в других случаях). Он также является EventEmitter
.
net.Socket
может быть создан пользователем и использоваться напрямую для взаимодействия с сервером. Например, он возвращается функцией net.createConnection()
, поэтому пользователь может использовать его для связи с сервером.
Он также может быть создан Node.js и передан пользователю при получении соединения. Например, он передается слушателям события 'connection'
, генерируемого net.Server
, поэтому пользователь может использовать его для взаимодействия с клиентом.
new net.Socket([options])
[История]
Версия | Изменения |
---|---|
v15.14.0 | Добавлена поддержка AbortSignal. |
v12.10.0 | Добавлен параметр onread . |
v0.3.4 | Добавлено в: v0.3.4 |
options
<Object> Доступные параметры:allowHalfOpen
<boolean> Если установлено вfalse
, то сокет автоматически завершит запись, когда завершится чтение. См.net.createServer()
и событие'end'
для подробностей. По умолчанию:false
.fd
<number> Если указан, оборачивает существующий сокет с заданным дескриптором файла, иначе будет создан новый сокет.onread
<Object> Если указан, входящие данные хранятся в одномbuffer
и передаются в предоставленныйcallback
, когда данные поступают в сокет. Это приведет к тому, что функциональность потоковой передачи не будет предоставлять никаких данных. События сокета, такие как'error'
,'end'
и'close'
, будут вызываться как обычно. Методы, такие какpause()
иresume()
, также будут работать как ожидается.buffer
<Buffer> | <Uint8Array> | <Function> Либо повторно используемый фрагмент памяти для хранения входящих данных, либо функция, которая его возвращает.callback
<Function> Эта функция вызывается для каждого фрагмента входящих данных. Ей передаются два аргумента: количество байтов, записанных вbuffer
, и ссылка наbuffer
. Вернитеfalse
из этой функции, чтобы неявноpause()
сокет. Эта функция будет выполнена в глобальном контексте.readable
<boolean> Разрешить чтение из сокета, когда переданfd
, иначе игнорируется. По умолчанию:false
.signal
<AbortSignal> Сигнал прерывания, который может использоваться для уничтожения сокета.writable
<boolean> Разрешить запись в сокет, когда переданfd
, иначе игнорируется. По умолчанию:false
.
Возвращает: <net.Socket>
Создает новый объект сокета.
Недавно созданный сокет может быть либо TCP-сокет, либо конечная точка потоковой передачи IPC, в зависимости от того, к чему он connect()
.
Событие: 'close'
Добавлено в: v0.1.90
hadError
<boolean>true
, если у сокета произошла ошибка передачи.
Вызывается после полного закрытия сокета. Аргумент hadError
— это булево значение, указывающее, был ли сокет закрыт из-за ошибки передачи.
Событие: 'connect'
Добавлено в: v0.1.90
Вызывается при успешном установлении соединения сокета. См. net.createConnection()
.
Событие: 'connectionAttempt'
Добавлено в: v21.6.0, v20.12.0
ip
<string> IP-адрес, к которому сокет пытается подключиться.port
<number> Порт, к которому сокет пытается подключиться.family
<number> Семейство IP-адреса. Может быть6
для IPv6 или4
для IPv4.
Вызывается при запуске новой попытки подключения. Это событие может быть вызвано несколько раз, если в socket.connect(options)
включен алгоритм автоматического выбора семейства.
Событие: 'connectionAttemptFailed'
Добавлено в: v21.6.0, v20.12.0
ip
<string> IP-адрес, к которому сокет пытался подключиться.port
<number> Порт, к которому сокет пытался подключиться.family
<number> Семейство IP-адреса. Может быть6
для IPv6 или4
для IPv4.error
<Error> Ошибка, связанная с неудачей.
Вызывается при неудаче попытки подключения. Это событие может быть вызвано несколько раз, если в socket.connect(options)
включен алгоритм автоматического выбора семейства.
Событие: 'connectionAttemptTimeout'
Добавлено в: v21.6.0, v20.12.0
ip
<string> IP-адрес, к которому сокет пытался подключиться.port
<number> Порт, к которому сокет пытался подключиться.family
<number> Семейство IP-адреса. Может быть6
для IPv6 или4
для IPv4.
Генерируется при истечении времени ожидания попытки подключения. Это событие генерируется (и может генерироваться несколько раз) только в том случае, если алгоритм автоматического выбора семейства включен в socket.connect(options)
.
Событие: 'data'
Добавлено в: v0.1.90
Генерируется при получении данных. Аргумент data
будет Buffer
или String
. Кодировка данных устанавливается с помощью socket.setEncoding()
.
Данные будут потеряны, если обработчик отсутствует, когда Socket
генерирует событие 'data'
.
Событие: 'drain'
Добавлено в: v0.1.90
Генерируется, когда буфер записи становится пустым. Может использоваться для регулирования загрузки.
См. также: возвращаемые значения socket.write()
.
Событие: 'end'
Добавлено в: v0.1.90
Генерируется, когда другой конец сокета сигнализирует об окончании передачи, тем самым завершая читаемую сторону сокета.
По умолчанию (allowHalfOpen
имеет значение false
) сокет отправит пакет окончания передачи и уничтожит свой файловый дескриптор, как только он запишет свою ожидающую очередь записи. Однако, если allowHalfOpen
установлено в true
, сокет не будет автоматически end()
свою записываемую сторону, позволяя пользователю записывать произвольные объемы данных. Пользователь должен явно вызвать end()
, чтобы закрыть соединение (т.е. отправить пакет FIN).
Событие: 'error'
Добавлено в: v0.1.90
Генерируется при возникновении ошибки. Событие 'close'
будет вызвано непосредственно после этого события.
Событие: 'lookup'
[История]
Версия | Изменения |
---|---|
v5.10.0 | Теперь поддерживается параметр host . |
v0.11.3 | Добавлено в: v0.11.3 |
Генерируется после разрешения имени хоста, но до установления соединения. Не применимо к Unix-сокетам.
err
<Error> | <null> Объект ошибки. См.dns.lookup()
.address
<string> IP-адрес.family
<number> | <null> Тип адреса. См.dns.lookup()
.host
<string> Имя хоста.
Событие: 'ready'
Добавлено в: v9.11.0
Генерируется, когда сокет готов к использованию.
Вызывается сразу после 'connect'
.
Событие: 'timeout'
Добавлено в: v0.1.90
Генерируется, если сокет выходит из строя из-за бездействия. Это лишь уведомление о том, что сокет был неактивен. Пользователь должен вручную закрыть соединение.
См. также: socket.setTimeout()
.
socket.address()
[История]
Версия | Изменения |
---|---|
v18.4.0 | Свойство family теперь возвращает строку, а не число. |
v18.0.0 | Свойство family теперь возвращает число, а не строку. |
v0.1.90 | Добавлено в: v0.1.90 |
- Возвращает: <Object>
Возвращает связанный address
, имя семейства адресов family
и port
сокета, как сообщается операционной системой: { port: 12346, family: 'IPv4', address: '127.0.0.1' }
socket.autoSelectFamilyAttemptedAddresses
Добавлен в: v19.4.0, v18.18.0
Это свойство присутствует только в том случае, если алгоритм автоматического выбора семейства включен в socket.connect(options)
, и представляет собой массив адресов, которые были опробованы.
Каждый адрес — это строка в формате $IP:$PORT
. Если соединение прошло успешно, последний адрес — это тот, к которому сокет сейчас подключен.
socket.bufferSize
Добавлен в: v0.3.8
Устарел с: v14.6.0
[Стабильность: 0 - Устарело]
Стабильность: 0 Стабильность: 0 - Устарело: Используйте writable.writableLength
вместо этого.
Это свойство показывает количество символов, буферизованных для записи. Буфер может содержать строки, длина которых после кодирования ещё не известна. Поэтому это число является лишь приблизительным значением количества байтов в буфере.
net.Socket
имеет свойство, благодаря которому socket.write()
всегда работает. Это помогает пользователям быстро начать работу. Компьютер не всегда может обрабатывать количество данных, записываемых в сокет. Сетевое соединение может быть просто слишком медленным. Node.js внутренне будет ставить в очередь данные, записанные в сокет, и отправлять их по сети, когда это станет возможным.
Следствием этого внутреннего буферизации является то, что объём памяти может увеличиваться. Пользователи, сталкивающиеся с большими или растущими значениями bufferSize
, должны попытаться «регулировать» потоки данных в своей программе с помощью socket.pause()
и socket.resume()
.
socket.bytesRead
Добавлен в: v0.5.3
Количество полученных байтов.
socket.bytesWritten
Добавлен в: v0.5.3
Количество отправленных байтов.
socket.connect()
Инициирует соединение на заданном сокете.
Возможные сигнатуры:
socket.connect(options[, connectListener])
socket.connect(path[, connectListener])
для соединений IPC.socket.connect(port[, host][, connectListener])
для TCP-соединений.- Возвращает: <net.Socket> Сам сокет.
Эта функция асинхронна. Когда соединение установлено, будет вызвано событие 'connect'
. Если возникла проблема с подключением, вместо события 'connect'
будет вызвано событие 'error'
с ошибкой, переданной в обработчик 'error'
. Последний параметр connectListener
, если указан, будет добавлен как обработчик события 'connect'
однократно.
Эта функция должна использоваться только для повторного подключения сокета после того, как было вызвано событие 'close'
, иначе это может привести к неопределённому поведению.
socket.connect(options[, connectListener])
[История]
Версия | Изменения |
---|---|
v19.4.0 | Значение по умолчанию для параметра autoSelectFamily может быть изменено во время выполнения с помощью setDefaultAutoSelectFamily или через параметр командной строки --enable-network-family-autoselection . |
v20.0.0, v18.18.0 | Значение по умолчанию для параметра autoSelectFamily теперь равно true. Флаг CLI --enable-network-family-autoselection переименован в --network-family-autoselection . Старое имя теперь является псевдонимом, но его использование не рекомендуется. |
v19.3.0, v18.13.0 | Добавлен параметр autoSelectFamily . |
v17.7.0, v16.15.0 | Теперь поддерживаются параметры noDelay , keepAlive и keepAliveInitialDelay . |
v6.0.0 | Параметр hints теперь по умолчанию равен 0 во всех случаях. Ранее, при отсутствии параметра family , он по умолчанию был равен `dns.ADDRCONFIG |
v5.11.0 | Теперь поддерживается параметр hints . |
v0.1.90 | Добавлено в: v0.1.90 |
options
<Object>connectListener
<Function> Общий параметр методовsocket.connect()
. Будет добавлен как обработчик события'connect'
однократно.- Возвращает: <net.Socket> Сам сокет.
Инициирует соединение на заданном сокете. Обычно этот метод не требуется, сокет должен быть создан и открыт с помощью net.createConnection()
. Используйте это только при реализации пользовательского сокета.
Для TCP-соединений доступны следующие параметры options
:
autoSelectFamily
<boolean>: Если установлено вtrue
, то включается алгоритм автоматического обнаружения семейства, который приблизительно реализует раздел 5 RFC 8305. Параметрall
, переданный в lookup, устанавливается вtrue
, и сокеты пытаются подключиться ко всем полученным адресам IPv6 и IPv4 последовательно, пока не будет установлено соединение. Сначала пробуется первый возвращенный адрес AAAA, затем первый возвращенный адрес A, затем второй возвращенный адрес AAAA и так далее. Каждой попытке соединения (кроме последней) даётся время, указанное параметромautoSelectFamilyAttemptTimeout
, перед истечением времени ожидания и попыткой подключения к следующему адресу. Игнорируется, если параметрfamily
не равен0
или если установленlocalAddress
. Ошибки соединения не генерируются, если хотя бы одно соединение успешно. Если все попытки подключения завершатся неудачей, будет сгенерировано одноAggregateError
со всеми неудачными попытками. По умолчанию:net.getDefaultAutoSelectFamily()
.autoSelectFamilyAttemptTimeout
<number>: Время в миллисекундах ожидания завершения попытки соединения перед попыткой подключения к следующему адресу при использовании параметраautoSelectFamily
. Если установлено положительное целое число, меньшее10
, то вместо него будет использовано значение10
. По умолчанию:net.getDefaultAutoSelectFamilyAttemptTimeout()
.family
<number>: Версия стека IP. Должно быть4
,6
или0
. Значение0
указывает на то, что допускаются как IPv4, так и IPv6 адреса. По умолчанию:0
.hints
<number> Необязательные подсказкиdns.lookup()
.host
<string> Хост, к которому должен подключаться сокет. По умолчанию:'localhost'
.keepAlive
<boolean>: Если установлено вtrue
, то включает функциональность keep-alive на сокете сразу после установления соединения, аналогично тому, как это делается вsocket.setKeepAlive()
. По умолчанию:false
.keepAliveInitialDelay
<number>: Если установлено положительное число, устанавливает начальную задержку перед отправкой первого запроса keepalive на неактивном сокете. По умолчанию:0
.localAddress
<string> Локальный адрес, с которого должен подключаться сокет.localPort
<number> Локальный порт, с которого должен подключаться сокет.lookup
<Function> Пользовательская функция поиска. По умолчанию:dns.lookup()
.noDelay
<boolean>: Если установлено вtrue
, то отключает использование алгоритма Нагла сразу после установления сокета. По умолчанию:false
.port
<number> Обязательно. Порт, к которому должен подключаться сокет.blockList
<net.BlockList>blockList
может использоваться для отключения исходящего доступа к определенным IP-адресам, диапазонам IP-адресов или IP-подсетям.
Для соединений IPC доступны следующие параметры options
:
path
<string> Обязательно. Путь, к которому должен подключаться клиент. См. Идентификация путей для соединений IPC. Если указан, то описанные выше параметры для TCP игнорируются.
socket.connect(path[, connectListener])
path
<string> Путь, к которому должен подключаться клиент. См. Идентификация путей для IPC-соединений.connectListener
<Function> Общий параметр методовsocket.connect()
. Будет добавлен в качестве обработчика события'connect'
один раз.- Возвращает: <net.Socket> Сам сокет.
Инициирует IPC соединение на данном сокете.
Псевдоним для socket.connect(options[, connectListener])
, вызываемого с { path: path }
в качестве options
.
socket.connect(port[, host][, connectListener])
Добавлено в: v0.1.90
port
<number> Порт, к которому должен подключаться клиент.host
<string> Хост, к которому должен подключаться клиент.connectListener
<Function> Общий параметр методовsocket.connect()
. Будет добавлен в качестве обработчика события'connect'
один раз.- Возвращает: <net.Socket> Сам сокет.
Инициирует TCP-соединение на данном сокете.
Псевдоним для socket.connect(options[, connectListener])
, вызываемого с {port: port, host: host}
в качестве options
.
socket.connecting
Добавлено в: v6.1.0
Если true
, socket.connect(options[, connectListener])
был вызван и еще не завершен. Он останется true
до тех пор, пока сокет не будет подключен, затем он будет установлен в false
, и будет отправлено событие 'connect'
. Обратите внимание, что обратный вызов socket.connect(options[, connectListener])
является обработчиком события 'connect'
.
socket.destroy([error])
Добавлен в: v0.1.90
error
<Object>- Возвращает: <net.Socket>
Гарантирует, что на этом сокете больше не будет активности ввода-вывода. Уничтожает поток и закрывает соединение.
См. writable.destroy()
для получения более подробной информации.
socket.destroyed
- <boolean> Указывает, уничтожено ли соединение или нет. После уничтожения соединения никакие дальнейшие данные не могут быть переданы с его помощью.
См. writable.destroyed
для получения более подробной информации.
socket.destroySoon()
Добавлен в: v0.3.4
Уничтожает сокет после записи всех данных. Если событие 'finish'
уже было отправлено, сокет уничтожается немедленно. Если сокет всё ещё доступен для записи, он неявно вызывает socket.end()
.
socket.end([data[, encoding]][, callback])
Добавлен в: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> Используется только тогда, когда data — строка. По умолчанию:'utf8'
.callback
<Function> Необязательный обратный вызов после завершения работы сокета.- Возвращает: <net.Socket> Сам сокет.
Полузакрывает сокет. То есть отправляет пакет FIN. Возможно, сервер всё ещё будет отправлять некоторые данные.
См. writable.end()
для получения более подробной информации.
socket.localAddress
Добавлен в: v0.9.6
Строковое представление локального IP-адреса, к которому подключается удалённый клиент. Например, на сервере, прослушивающем '0.0.0.0'
, если клиент подключается по '192.168.1.1'
, значение socket.localAddress
будет '192.168.1.1'
.
socket.localPort
Добавлен в: v0.9.6
Числовое представление локального порта. Например, 80
или 21
.
socket.localFamily
Добавлен в: v18.8.0, v16.18.0
Строковое представление семейства локальных IP-адресов. 'IPv4'
или 'IPv6'
.
socket.pause()
- Возвращает: <net.Socket> Сам сокет.
Приостанавливает чтение данных. То есть события 'data'
генерироваться не будут. Полезно для ограничения скорости загрузки.
socket.pending
Добавлен в: v11.2.0, v10.16.0
Имеет значение true
, если сокет ещё не подключен, либо потому что .connect()
ещё не был вызван, либо потому что он всё ещё находится в процессе подключения (см. socket.connecting
).
socket.ref()
Добавлен в: v0.9.1
- Возвращает: <net.Socket> Сам сокет.
Противоположность unref()
. Вызов ref()
для ранее unref
ed сокета не позволит программе завершиться, если это единственный оставшийся сокет (поведение по умолчанию). Если сокет уже ref
ed, повторный вызов ref
не будет иметь эффекта.
socket.remoteAddress
Добавлен в: v0.5.10
Строковое представление удалённого IP-адреса. Например, '74.125.127.100'
или '2001:4860:a005::68'
. Значение может быть undefined
, если сокет уничтожен (например, если клиент отключился).
socket.remoteFamily
Добавлен в: v0.11.14
Строковое представление семейства удалённых IP-адресов. 'IPv4'
или 'IPv6'
. Значение может быть undefined
, если сокет уничтожен (например, если клиент отключился).
socket.remotePort
Добавлен в: v0.5.10
Числовое представление удаленного порта. Например, 80
или 21
. Значение может быть undefined
, если сокет уничтожен (например, если клиент отключился).
socket.resetAndDestroy()
Добавлен в: v18.3.0, v16.17.0
- Возвращает: <net.Socket>
Закрывает TCP-соединение, отправляя пакет RST, и уничтожает поток. Если этот TCP-сокет находится в состоянии подключения, он отправит пакет RST и уничтожит этот TCP-сокет после установления соединения. В противном случае он вызовет socket.destroy
с ошибкой ERR_SOCKET_CLOSED
. Если это не TCP-сокет (например, pipe), вызов этого метода немедленно вызовет ошибку ERR_INVALID_HANDLE_TYPE
.
socket.resume()
- Возвращает: <net.Socket> Сам сокет.
Возобновляет чтение после вызова socket.pause()
.
socket.setEncoding([encoding])
Добавлен в: v0.1.90
encoding
<string>- Возвращает: <net.Socket> Сам сокет.
Устанавливает кодировку для сокета как Readable Stream. См. readable.setEncoding()
для получения дополнительной информации.
socket.setKeepAlive([enable][, initialDelay])
[История]
Версия | Изменения |
---|---|
v13.12.0, v12.17.0 | Добавлены новые значения по умолчанию для параметров сокета TCP_KEEPCNT и TCP_KEEPINTVL . |
v0.1.92 | Добавлено в: v0.1.92 |
enable
<boolean> По умолчанию:false
initialDelay
<number> По умолчанию:0
- Возвращает: <net.Socket> Сам сокет.
Включает/отключает функцию keep-alive и, при необходимости, устанавливает начальную задержку перед отправкой первого keepalive-запроса на неактивном сокете.
Установите initialDelay
(в миллисекундах), чтобы установить задержку между последним полученным пакетом данных и первым keepalive-запросом. Установка 0
для initialDelay
оставит значение без изменений по сравнению с настройкой по умолчанию (или предыдущей).
Включение функции keep-alive установит следующие параметры сокета:
SO_KEEPALIVE=1
TCP_KEEPIDLE=initialDelay
TCP_KEEPCNT=10
TCP_KEEPINTVL=1
socket.setNoDelay([noDelay])
Добавлен в: v0.1.90
noDelay
<boolean> По умолчанию:true
- Возвращает: <net.Socket> Сам сокет.
Включает/отключает использование алгоритма Нэгла.
При создании TCP-соединения алгоритм Нэгла будет включен.
Алгоритм Нэгла задерживает данные перед отправкой по сети. Он пытается оптимизировать пропускную способность за счет увеличения задержки.
Передача true
для noDelay
или отсутствие аргумента отключат алгоритм Нэгла для сокета. Передача false
для noDelay
включит алгоритм Нэгла.
socket.setTimeout(timeout[, callback])
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недопустимого обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.1.90 | Добавлено в: v0.1.90 |
timeout
<number>callback
<Function>- Возвращает: <net.Socket> Сам сокет.
Устанавливает тайм-аут сокета после timeout
миллисекунд бездействия на сокете. По умолчанию net.Socket
не имеет тайм-аута.
Когда срабатывает тайм-аут бездействия, сокет получает событие 'timeout'
, но соединение не разрывается. Пользователь должен вручную вызвать socket.end()
или socket.destroy()
, чтобы завершить соединение.
socket.setTimeout(3000)
socket.on('timeout', () => {
console.log('socket timeout')
socket.end()
})
Если timeout
равен 0, то существующий тайм-аут бездействия отключается.
Необязательный параметр callback
будет добавлен как одноразовый обработчик для события 'timeout'
.
socket.timeout
Добавлен в: v10.7.0
Тайм-аут сокета в миллисекундах, установленный с помощью socket.setTimeout()
. Значение undefined
, если тайм-аут не установлен.
socket.unref()
Добавлен в: v0.9.1
- Возвращает: <net.Socket> Сам сокет.
Вызов unref()
для сокета позволит программе завершиться, если это единственный активный сокет в системе событий. Если сокет уже unref
ed, повторный вызов unref()
не будет иметь эффекта.
socket.write(data[, encoding][, callback])
Добавлен в: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> Используется только когдаdata
является строкой. По умолчанию:utf8
.callback
<Function>- Возвращает: <boolean>
Отправляет данные по сокету. Второй параметр указывает кодировку в случае строки. По умолчанию используется кодировка UTF8.
Возвращает true
, если все данные были успешно отправлены в буфер ядра. Возвращает false
, если все или часть данных были помещены в очередь в пользовательской памяти. Событие 'drain'
будет вызвано, когда буфер снова освободится.
Необязательный параметр callback
будет выполнен, когда данные будут окончательно записаны, что может произойти не сразу.
См. метод write()
потока Writable
для получения дополнительной информации.
socket.readyState
Добавлено в: v0.5.0
Это свойство представляет состояние соединения как строку.
- Если поток устанавливает соединение,
socket.readyState
равноopening
. - Если поток доступен для чтения и записи, он имеет значение
open
. - Если поток доступен для чтения, но не для записи, он имеет значение
readOnly
. - Если поток недоступен ни для чтения, ни для записи, он имеет значение
writeOnly
.
net.connect()
Псевдоним для net.createConnection()
.
Возможные сигнатуры:
net.connect(options[, connectListener])
net.connect(path[, connectListener])
для соединений IPC.net.connect(port[, host][, connectListener])
для TCP-соединений.
net.connect(options[, connectListener])
Добавлено в: v0.7.0
options
<Объект>connectListener
<Функция>- Возвращает: <net.Socket>
Псевдоним для net.createConnection(options[, connectListener])
.
net.connect(path[, connectListener])
Добавлено в: v0.1.90
path
<строка>connectListener
<Функция>- Возвращает: <net.Socket>
Псевдоним для net.createConnection(path[, connectListener])
.
net.connect(port[, host][, connectListener])
Добавлено в: v0.1.90
port
<число>host
<строка>connectListener
<Функция>- Возвращает: <net.Socket>
Псевдоним для net.createConnection(port[, host][, connectListener])
.
net.createConnection()
Функция-фабрика, которая создаёт новый net.Socket
, немедленно инициирует соединение с помощью socket.connect()
, а затем возвращает net.Socket
, который начинает соединение.
Когда соединение установлено, событие 'connect'
будет испущено на возвращаемом сокете. Последний параметр connectListener
, если предоставлен, будет добавлен в качестве обработчика события 'connect'
один раз.
Возможные сигнатуры:
net.createConnection(options[, connectListener])
net.createConnection(path[, connectListener])
для соединений IPC.net.createConnection(port[, host][, connectListener])
для TCP-соединений.
Функция net.connect()
является псевдонимом этой функции.
net.createConnection(options[, connectListener])
Добавлено в: v0.1.90
options
<Object> Обязательный. Будет передан как в вызовnew net.Socket([options])
, так и в методsocket.connect(options[, connectListener])
.connectListener
<Function> Общий параметр функцийnet.createConnection()
. Если предоставлен, будет добавлен в качестве обработчика события'connect'
на возвращаемом сокете один раз.- Возвращает: <net.Socket> Недавно созданный сокет, используемый для начала соединения.
Для доступных опций см. new net.Socket([options])
и socket.connect(options[, connectListener])
.
Дополнительные опции:
timeout
<number> Если задано, будет использовано для вызоваsocket.setTimeout(timeout)
после создания сокета, но до начала соединения.
Ниже приведён пример клиента сервера эхо, описанного в разделе net.createServer()
:
import net from 'node:net'
const client = net.createConnection({ port: 8124 }, () => {
// Обработчик события 'connect'.
console.log('connected to server!')
client.write('world!\r\n')
})
client.on('data', data => {
console.log(data.toString())
client.end()
})
client.on('end', () => {
console.log('disconnected from server')
})
const net = require('node:net')
const client = net.createConnection({ port: 8124 }, () => {
// Обработчик события 'connect'.
console.log('connected to server!')
client.write('world!\r\n')
})
client.on('data', data => {
console.log(data.toString())
client.end()
})
client.on('end', () => {
console.log('disconnected from server')
})
Для подключения к сокету /tmp/echo.sock
:
const client = net.createConnection({ path: '/tmp/echo.sock' })
Ниже приведён пример клиента, использующего опции port
и onread
. В этом случае опция onread
будет использована только для вызова new net.Socket([options])
, а опция port
— для вызова socket.connect(options[, connectListener])
.
import net from 'node:net'
import { Buffer } from 'node:buffer'
net.createConnection({
port: 8124,
onread: {
// Повторно использует буфер размером 4 КБ для каждого чтения из сокета.
buffer: Buffer.alloc(4 * 1024),
callback: function (nread, buf) {
// Полученные данные доступны в `buf` от 0 до `nread`.
console.log(buf.toString('utf8', 0, nread))
},
},
})
const net = require('node:net')
net.createConnection({
port: 8124,
onread: {
// Повторно использует буфер размером 4 КБ для каждого чтения из сокета.
buffer: Buffer.alloc(4 * 1024),
callback: function (nread, buf) {
// Полученные данные доступны в `buf` от 0 до `nread`.
console.log(buf.toString('utf8', 0, nread))
},
},
})
net.createConnection(path[, connectListener])
Добавлен в: v0.1.90
path
<string> Путь, к которому должен подключаться сокет. Будет передан вsocket.connect(path[, connectListener])
. См. Идентификация путей для IPC-соединений.connectListener
<Function> Общий параметр функцийnet.createConnection()
, одноразовый прослушиватель для события'connect'
на инициирующем сокете. Будет передан вsocket.connect(path[, connectListener])
.- Возвращает: <net.Socket> Недавно созданный сокет, используемый для начала соединения.
Инициирует IPC соединение.
Эта функция создает новый net.Socket
со всеми параметрами, установленными по умолчанию, немедленно инициирует соединение с помощью socket.connect(path[, connectListener])
, а затем возвращает net.Socket
, который запускает соединение.
net.createConnection(port[, host][, connectListener])
Добавлен в: v0.1.90
port
<number> Порт, к которому должен подключаться сокет. Будет передан вsocket.connect(port[, host][, connectListener])
.host
<string> Хост, к которому должен подключаться сокет. Будет передан вsocket.connect(port[, host][, connectListener])
. По умолчанию:'localhost'
.connectListener
<Function> Общий параметр функцийnet.createConnection()
, одноразовый прослушиватель для события'connect'
на инициирующем сокете. Будет передан вsocket.connect(port[, host][, connectListener])
.- Возвращает: <net.Socket> Недавно созданный сокет, используемый для начала соединения.
Инициирует TCP-соединение.
Эта функция создает новый net.Socket
со всеми параметрами, установленными по умолчанию, немедленно инициирует соединение с помощью socket.connect(port[, host][, connectListener])
, а затем возвращает net.Socket
, который запускает соединение.
net.createServer([options][, connectionListener])
[История]
Версия | Изменения |
---|---|
v20.1.0, v18.17.0 | Теперь поддерживается параметр highWaterMark . |
v17.7.0, v16.15.0 | Теперь поддерживаются параметры noDelay , keepAlive и keepAliveInitialDelay . |
v0.5.0 | Добавлено в: v0.5.0 |
options
<Object>allowHalfOpen
<boolean> Если установлено вfalse
, то сокет автоматически закроет сторону записи, когда закончится сторона чтения. По умолчанию:false
.highWaterMark
<number> Дополнительно переопределяетreadableHighWaterMark
иwritableHighWaterMark
всехnet.Socket
. По умолчанию: См.stream.getDefaultHighWaterMark()
.keepAlive
<boolean> Если установлено вtrue
, то включает функциональность keep-alive на сокете сразу после получения нового входящего соединения, аналогично тому, что делается вsocket.setKeepAlive()
. По умолчанию:false
.keepAliveInitialDelay
<number> Если установлено в положительное число, то устанавливает начальную задержку перед отправкой первого зонда keepalive на неактивном сокете. По умолчанию:0
.noDelay
<boolean> Если установлено вtrue
, то отключает использование алгоритма Нагла сразу после получения нового входящего соединения. По умолчанию:false
.pauseOnConnect
<boolean> Указывает, следует ли приостанавливать сокет при входящих соединениях. По умолчанию:false
.blockList
<net.BlockList>blockList
может использоваться для отключения входящего доступа к определенным IP-адресам, диапазонам IP-адресов или IP-подсетям. Это не работает, если сервер находится за обратным прокси-сервером, NAT и т.д., потому что адрес, проверяемый на соответствие списку блокировки, — это адрес прокси-сервера или адрес, указанный NAT.
connectionListener
<Function> Автоматически устанавливается как прослушиватель события'connection'
.Возвращает: <net.Server>
Создает новый TCP или IPC сервер.
Если allowHalfOpen
установлено в true
, когда другой конец сокета сигнализирует о завершении передачи, сервер отправит обратно завершение передачи только тогда, когда будет явно вызван socket.end()
. Например, в контексте TCP, когда получен пакет FIN, пакет FIN отправляется обратно только тогда, когда явно вызывается socket.end()
. До этого момента соединение является полузакрытым (нечитаемым, но записываемым). См. событие 'end'
и RFC 1122 (раздел 4.2.2.13) для получения дополнительной информации.
Если pauseOnConnect
установлено в true
, то сокет, связанный с каждым входящим соединением, будет приостановлен, и данные не будут считываться из его дескриптора. Это позволяет передавать соединения между процессами без считывания каких-либо данных исходным процессом. Чтобы начать чтение данных из приостановленного сокета, вызовите socket.resume()
.
Сервер может быть TCP-сервером или IPC сервером в зависимости от того, к чему он listen()
.
Вот пример TCP-эхо-сервера, который прослушивает соединения на порту 8124:
import net from 'node:net'
const server = net.createServer(c => {
// Прослушиватель 'connection'.
console.log('client connected')
c.on('end', () => {
console.log('client disconnected')
})
c.write('hello\r\n')
c.pipe(c)
})
server.on('error', err => {
throw err
})
server.listen(8124, () => {
console.log('server bound')
})
const net = require('node:net')
const server = net.createServer(c => {
// Прослушиватель 'connection'.
console.log('client connected')
c.on('end', () => {
console.log('client disconnected')
})
c.write('hello\r\n')
c.pipe(c)
})
server.on('error', err => {
throw err
})
server.listen(8124, () => {
console.log('server bound')
})
Проверьте это с помощью telnet
:
telnet localhost 8124
Для прослушивания сокета /tmp/echo.sock
:
server.listen('/tmp/echo.sock', () => {
console.log('server bound')
})
Используйте nc
для подключения к серверу сокета домена Unix:
nc -U /tmp/echo.sock
net.getDefaultAutoSelectFamily()
Добавлено в: v19.4.0
Возвращает текущее значение по умолчанию параметра autoSelectFamily
для socket.connect(options)
. Начальное значение по умолчанию — true
, если не указан параметр командной строки --no-network-family-autoselection
.
- Возвращает: <boolean> Текущее значение по умолчанию параметра
autoSelectFamily
.
net.setDefaultAutoSelectFamily(value)
Добавлено в: v19.4.0
Устанавливает значение по умолчанию параметра autoSelectFamily
для socket.connect(options)
.
value
<boolean> Новое значение по умолчанию. Начальное значение по умолчанию —true
, если не указан параметр командной строки--no-network-family-autoselection
.
net.getDefaultAutoSelectFamilyAttemptTimeout()
Добавлено в: v19.8.0, v18.18.0
Возвращает текущее значение по умолчанию параметра autoSelectFamilyAttemptTimeout
для socket.connect(options)
. Начальное значение по умолчанию — 250
или значение, указанное с помощью параметра командной строки --network-family-autoselection-attempt-timeout
.
- Возвращает: <number> Текущее значение по умолчанию параметра
autoSelectFamilyAttemptTimeout
.
net.setDefaultAutoSelectFamilyAttemptTimeout(value)
Добавлено в: v19.8.0, v18.18.0
Устанавливает значение по умолчанию параметра autoSelectFamilyAttemptTimeout
для socket.connect(options)
.
value
<number> Новое значение по умолчанию, которое должно быть положительным числом. Если число меньше10
, используется значение10
. Начальное значение по умолчанию —250
или значение, указанное с помощью параметра командной строки--network-family-autoselection-attempt-timeout
.
net.isIP(input)
Добавлено в: v0.3.0
Возвращает 6
, если input
— это адрес IPv6. Возвращает 4
, если input
— это адрес IPv4 в точечно-десятичной записи без ведущих нулей. В противном случае возвращает 0
.
net.isIP('::1') // возвращает 6
net.isIP('127.0.0.1') // возвращает 4
net.isIP('127.000.000.001') // возвращает 0
net.isIP('127.0.0.1/24') // возвращает 0
net.isIP('fhqwhgads') // возвращает 0
net.isIPv4(input)
Добавлено в: v0.3.0
Возвращает true
, если input
— это адрес IPv4 в точечно-десятичной записи без ведущих нулей. В противном случае возвращает false
.
net.isIPv4('127.0.0.1') // возвращает true
net.isIPv4('127.000.000.001') // возвращает false
net.isIPv4('127.0.0.1/24') // возвращает false
net.isIPv4('fhqwhgads') // возвращает false
net.isIPv6(input)
Добавлено в: v0.3.0
Возвращает true
, если input
— это адрес IPv6. В противном случае возвращает false
.
net.isIPv6('::1') // возвращает true
net.isIPv6('fhqwhgads') // возвращает false