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>address
<string> Сетевой адрес в виде строки IPv4 или IPv6. По умолчанию:'127.0.0.1'
, еслиfamily
имеет значение'ipv4'
;'::'
, еслиfamily
имеет значение'ipv6'
.family
<string> Одно из значений:'ipv4'
или'ipv6'
. По умолчанию:'ipv4'
.flowlabel
<number> Метка потока IPv6, используется только еслиfamily
имеет значение'ipv6'
.port
<number> IP-порт.
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 domain socket, имя возвращается в виде строки.
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
[Stable: 1 - Experimental]
Stable: 1 Стабильность: 1 - Экспериментальная
Вызывает server.close()
и возвращает промис, который выполняется, когда сервер закрыт.
server.getConnections(callback)
Добавлено в: v0.9.7
callback
<Function>- Возвращает: <net.Server>
Асинхронно получает количество одновременных подключений на сервере. Работает, когда сокеты были отправлены в форки.
Callback должен принимать два аргумента 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('Address in use, retrying...');
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> functions.Возвращает: <net.Server>
Если указан port
, то он ведет себя так же, как server.listen([port[, host[, backlog]]][, callback])
. В противном случае, если указан path
, он ведет себя так же, как server.listen(path[, backlog][, callback])
. Если ни один из них не указан, будет выброшена ошибка.
Если exclusive
имеет значение false
(по умолчанию), то workers кластера будут использовать один и тот же базовый handle, позволяя разделять обязанности по обработке соединений. Когда exclusive
имеет значение true
, handle не является общим, и попытка совместного использования порта приводит к ошибке. Пример прослушивания на эксклюзивном порту показан ниже.
server.listen({
host: 'localhost',
port: 80,
exclusive: true,
});
Когда exclusive
имеет значение true
и базовый handle является общим, возможно, что несколько workers запрашивают handle с различными backlogs. В этом случае будет использован первый 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 endpoint (использует именованные каналы в 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> Сигнал Abort, который можно использовать для уничтожения сокета.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()
.
Данные будут потеряны, если при возникновении события 'data'
у Socket
нет слушателя.
Событие: '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
[Stable: 0 - Deprecated]
Stable: 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()
hints.host
<string> Хост, к которому должен подключиться сокет. По умолчанию:'localhost'
.keepAlive
<boolean> Если установлено значениеtrue
, это включает функцию поддержания активности (keep-alive) на сокете сразу после установления соединения, аналогично тому, что делается вsocket.setKeepAlive()
. По умолчанию:false
.keepAliveInitialDelay
<number> Если установлено положительное число, оно устанавливает начальную задержку перед отправкой первого зонда keepalive на неактивном сокете. По умолчанию:0
.localAddress
<string> Локальный адрес, с которого должен подключиться сокет.localPort
<number> Локальный порт, с которого должен подключиться сокет.lookup
<Function> Пользовательская функция lookup. По умолчанию:dns.lookup()
.noDelay
<boolean> Если установлено значениеtrue
, это отключает использование алгоритма Нагла сразу после установления сокета. По умолчанию:false
.port
<number> Обязательно. Порт, к которому должен подключиться сокет.blockList
<net.BlockList>blockList
можно использовать для отключения исходящего доступа к определенным IP-адресам, диапазонам IP-адресов или IP-подсетям.
Для IPC подключений доступны следующие options
:
path
<string> Обязательно. Путь, к которому должен подключиться клиент. См. Identifying paths for IPC connections. Если указано, параметры, специфичные для 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 являетсяstring
. По умолчанию:'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-сокет (например, канал), вызов этого метода немедленно вызовет ошибку 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
, повторный вызов unref()
не окажет никакого эффекта.
socket.write(data[, encoding][, callback])
Добавлено в: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> Используется только еслиdata
являетсяstring
. По умолчанию: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
<Object>connectListener
<Function>- Возвращает: <net.Socket>
Псевдоним для net.createConnection(options[, connectListener])
.
net.connect(path[, connectListener])
Добавлено в: v0.1.90
path
<string>connectListener
<Function>- Возвращает: <net.Socket>
Псевдоним для net.createConnection(path[, connectListener])
.
net.connect(port[, host][, connectListener])
Добавлено в: v0.1.90
port
<number>host
<string>connectListener
<Function>- Возвращает: <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' listener.
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' listener.
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: {
// Reuses a 4KiB Buffer for every read from the socket.
buffer: Buffer.alloc(4 * 1024),
callback: function(nread, buf) {
// Received data is available in `buf` from 0 to `nread`.
console.log(buf.toString('utf8', 0, nread));
},
},
});
const net = require('node:net');
net.createConnection({
port: 8124,
onread: {
// Reuses a 4KiB Buffer for every read from the socket.
buffer: Buffer.alloc(4 * 1024),
callback: function(nread, buf) {
// Received data is available in `buf` from 0 to `nread`.
console.log(buf.toString('utf8', 0, nread));
},
},
});
net.createConnection(path[, connectListener])
Added in: v0.1.90
path
<string> Путь, к которому должен подключиться сокет. Будет передан вsocket.connect(path[, connectListener])
. См. Определение путей для IPC-соединений.connectListener
<Function> Общий параметр функцийnet.createConnection()
, слушатель "once" для события'connect'
на инициирующем сокете. Будет передан вsocket.connect(path[, connectListener])
.- Returns: <net.Socket> Вновь созданный сокет, используемый для запуска соединения.
Инициирует IPC соединение.
Эта функция создает новый net.Socket
со всеми параметрами, установленными по умолчанию, немедленно инициирует соединение с socket.connect(path[, connectListener])
, затем возвращает net.Socket
, который запускает соединение.
net.createConnection(port[, host][, connectListener])
Added in: v0.1.90
port
<number> Порт, к которому должен подключиться сокет. Будет передан вsocket.connect(port[, host][, connectListener])
.host
<string> Хост, к которому должен подключиться сокет. Будет передан вsocket.connect(port[, host][, connectListener])
. Default:'localhost'
.connectListener
<Function> Общий параметр функцийnet.createConnection()
, слушатель "once" для события'connect'
на инициирующем сокете. Будет передан вsocket.connect(port[, host][, connectListener])
.- Returns: <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 echo-сервера, который прослушивает соединения на порту 8124:
import net from 'node:net';
const server = net.createServer((c) => {
// 'connection' listener.
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' listener.
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