Net¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Модуль node:net
предоставляет асинхронный сетевой API для создания потоковых TCP или IPC серверов (net.createServer()
) и клиентов (net.createConnection()
).
Доступ к нему можно получить с помощью:
1 |
|
Поддержка IPC¶
Модуль node:net
поддерживает IPC с помощью именованных труб в Windows и доменных сокетов Unix в других операционных системах.
Определение путей для IPC-соединений¶
net.connect()
, net.createConnection()
, server.listen()
и socket.connect()
принимают параметр path
для определения конечных точек IPC.
В Unix локальный домен также известен как домен Unix. Путь - это имя пути файловой системы. Он усекается до зависящей от ОС длины sizeof(sockaddr_un.sun_path) - 1
. Типичные значения - 107 байт в Linux и 103 байта в macOS. Если абстракция API Node.js создает сокет домена Unix, она также развязывает сокет домена Unix. Например, net.createServer()
может создать сокет домена Unix, а server.close()
отсоединит его. Но если пользователь создает сокет домена Unix вне этих абстракций, ему придется удалить его. То же самое относится к случаям, когда API Node.js создает сокет домена Unix, но затем программа аварийно завершается. Короче говоря, сокет домена Unix будет виден в файловой системе и будет существовать до тех пор, пока не будет удален.
В Windows локальный домен реализуется с помощью именованной трубы. Путь должен ссылаться на запись в \?\pipe\
или \.\pipe\
. Допускаются любые символы, но последний может выполнять некоторую обработку имен труб, например, разрешать последовательности ...
. Несмотря на то, как это может выглядеть, пространство имен труб является плоским. Трубы не сохраняются. Они удаляются, когда закрывается последняя ссылка на них. В отличие от доменных сокетов Unix, Windows закроет и удалит трубу при завершении процесса-владельца.
Экранирование строк JavaScript требует указания путей с дополнительным экранированием обратной косой чертой, например:
1 2 3 |
|
Класс: net.BlockList
.¶
Объект BlockList
можно использовать с некоторыми сетевыми API для задания правил запрета входящего или исходящего доступа к определенным IP-адресам, диапазонам IP-адресов или IP-подсетям.
blockList.addAddress(address[, type])
.¶
address
{string|net.SocketAddress} Адрес IPv4 или IPv6.type
<string>
Либо'ipv4'
, либо'ipv6'
. По умолчанию:'ipv4'
.
Добавляет правило для блокировки заданного IP-адреса.
blockList.addRange(start, end[, type])
.¶
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])
.¶
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])
.¶
address
{string|net.SocketAddress} IP-адрес для проверкиtype
<string>
Либо'ipv4'
, либо'ipv6'
. По умолчанию:'ipv4'
.- Возвращает:
<boolean>
Возвращает true
, если данный IP-адрес соответствует любому из правил, добавленных в BlockList
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
blockList.rules
¶
- Тип:
<string[]>
Список правил, добавленных в блок-лист.
Класс: net.SocketAddress
¶
new net.SocketAddress([options])
¶
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
.¶
- Тип
<string>
socketaddress.family
.¶
- Тип
<string>
ЛибоIPv4
, либоIPv6
.
socketaddress.flowlabel
.¶
- Тип
<number>
socketaddress.port
.¶
- Тип
<number>
Класс: net.Server
¶
- Расширяет:
<EventEmitter>
Этот класс используется для создания TCP или IPC сервера.
new net.Server([options][, connectionListener])
.¶
options
<Object>
См.net.createServer([options][, connectionListener])
.connectionListener
<Function>
Автоматически устанавливается в качестве слушателя для события'соединение'
.- Возвращает: {net.Server}
net.Server
является EventEmitter
со следующими событиями:
Событие: закрытие
.¶
Выдается при закрытии сервера. Если существуют соединения, то это событие не испускается, пока все соединения не будут завершены.
Событие: 'connection'
¶
<net.Socket>
Объект соединения
Выдается, когда создается новое соединение. socket
является экземпляром net.Socket
.
Событие: ошибка
.¶
Выдается при возникновении ошибки. В отличие от net.Socket
, событие 'close'
не будет испущено непосредственно после этого события, если только server.close()
не будет вызван вручную. См. пример обсуждения server.listen()
.
Событие: прослушивание
.¶
Выдается, когда сервер был связан после вызова server.listen()
.
Событие: 'drop'
.¶
Когда количество соединений достигает порогового значения server.maxConnections, сервер прекращает новые соединения и вместо этого выдает событие
'drop'. Если это TCP-сервер, то аргумент имеет следующий вид, в противном случае аргумент
не определен`.
data
<Object>
Аргумент, передаваемый слушателю события.
server.address()
.¶
- Возвращает: {Object|string|null}
Возвращает связанный адрес
, имя семейства адресов
и порт
сервера, как сообщает операционная система, если он прослушивает IP-сокет (полезно, чтобы узнать, какой порт был назначен при получении адреса, назначенного ОС): `{ port: 12346, семейство: 'IPv4', адрес: '127.0.
Для сервера, слушающего на сокете pipe или Unix domain, имя возвращается в виде строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
server.address()
возвращает null
до возникновения события 'listening'
или после вызова server.close()
.
server.close([callback])
.¶
callback
<Function>
Вызывается при закрытии сервера.- Возвращает: {net.Server}
Останавливает сервер от приема новых соединений и сохраняет существующие соединения. Эта функция асинхронна, сервер окончательно закрывается, когда все соединения завершены и сервер испускает событие 'close'
. Необязательный callback
будет вызван, как только произойдет событие 'close'
. В отличие от этого события, он будет вызван с Error
в качестве единственного аргумента, если сервер не был открыт в момент закрытия.
server.getConnections(callback)
.¶
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])
для серверов IPCserver.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
. Одним из способов решения этой проблемы может быть повторная попытка через определенное время:
1 2 3 4 5 6 7 8 9 |
|
server.listen(handle[, backlog][, callback])
.¶
handle
<Object>
backlog
<number>
Общий параметр функцийserver.listen()
callback
<Function>
- Возвращает: {net.Server}
Запускает сервер, прослушивающий соединения на заданном handle
, который уже был привязан к порту, доменному сокету Unix или именованной трубе Windows.
Объект handle
может быть либо сервером, либо сокетом (все, что имеет член _handle
), либо объектом с членом fd
, который является действительным файловым дескриптором.
Прослушивание файлового дескриптора не поддерживается в Windows.
server.listen(options[, callback])
.¶
options
<Object>
Требуется. Поддерживает следующие свойства:port
<number>
host
<string>
path
<string>
Будет игнорироваться, если указанport
. Смотрите Определение путей для IPC-соединений.backlog
<number>
Общий параметр функцийserver.listen()
.exclusive
<boolean>
По умолчанию:false
.readableAll
<boolean>
Для IPC-серверов делает трубу доступной для чтения всем пользователям. По умолчанию:false
.writableAll
<boolean>
Для IPC-серверов делает трубу доступной для записи для всех пользователей. По умолчанию:false
.ipv6Only
<boolean>
Для TCP-серверов установкаipv6Only
вtrue
отключает поддержку двойного стека, т.е. привязка к хосту::
не позволит привязать0.0.0.0
. По умолчанию:false
.signal
<AbortSignal>
AbortSignal, который может быть использован для закрытия прослушивающего сервера.
callback
<Function>
Функции.- Возвращает: {net.Server}
Если указан port
, он ведет себя так же, как server.listen([port[, host[, backlog]]][, callback])
. В противном случае, если указан path
, поведение будет таким же, как server.listen(path[, backlog][, callback])
. Если ни один из них не указан, будет выдана ошибка.
Если exclusive
имеет значение false
(по умолчанию), то рабочие кластера будут использовать один и тот же базовый хэндл, что позволит разделить обязанности по обработке соединений. Когда exclusive
имеет значение true
, хэндл не разделяется, и попытка разделения портов приводит к ошибке. Ниже показан пример, который прослушивает эксклюзивный порт.
1 2 3 4 5 |
|
Когда exclusive
имеет значение true
и базовый хэндл является общим, возможно, что несколько рабочих запрашивают хэндл с разными бэклогами. В этом случае будет использоваться первый backlog
, переданный главному процессу.
Запуск IPC-сервера от имени root может привести к тому, что путь к серверу будет недоступен для непривилегированных пользователей. Использование readableAll
и writableAll
сделает сервер доступным для всех пользователей.
Если включена опция signal, вызов
.abort()на соответствующем
AbortControllerаналогичен вызову
.close()` на сервере:
1 2 3 4 5 6 7 8 |
|
server.listen(path[, backlog][, callback])
.¶
path
<string>
Путь, который должен прослушивать сервер. См. Определение путей для IPC-соединений.backlog
<number>
Общий параметр функцийserver.listen()
.callback
<Function>
.- Возвращает: {net.Server}.
Запускает IPC сервер, прослушивающий соединения по заданному пути
.
server.listen([port[, host[, backlog]]][, callback])
.¶
порт
<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
¶
<boolean>
Указывает, прослушивает ли сервер соединения.
server.maxConnections
¶
Установите это свойство, чтобы отклонять соединения, когда количество соединений на сервере становится большим.
Не рекомендуется использовать эту опцию после того, как сокет был отправлен дочернему процессу с помощью child_process.fork()
.
server.ref()
.¶
- Возвращает: {net.Server}.
Противоположность unref()
, вызов ref()
на ранее unref
ed сервере не позволит программе выйти, если это единственный оставшийся сервер (поведение по умолчанию). Если сервер ref
отрефлектирован, повторный вызов `ref()
не будет иметь никакого эффекта.
server.unref()
¶
- Возвращает: {net.Server}.
Вызов unref()
на сервере позволит программе выйти, если это единственный активный сервер в системе событий. Если сервер уже unref
, то повторный вызов unref()
не будет иметь никакого эффекта.
Класс: net.Socket
.¶
- Расширяет: {stream.Duplex}
Этот класс является абстракцией TCP сокета или конечной точки потокового IPC (использует именованные трубы в Windows, и доменные сокеты Unix в противном случае). Он также является EventEmitter
.
Сокет net.Socket
может быть создан пользователем и использоваться непосредственно для взаимодействия с сервером. Например, его возвращает net.createConnection()
, поэтому пользователь может использовать его для общения с сервером.
Он также может быть создан Node.js и передан пользователю, когда соединение r
new net.Socket([options])
.¶
options
<Object>
Доступные опции:fd
<number>
Если указано, обернуть вокруг существующего сокета с заданным дескриптором файла, иначе будет создан новый сокет.allowHalfOpen
<boolean>
Если установлено значениеfalse
, то сокет будет автоматически завершать доступную для записи сторону при завершении доступной для чтения стороны. Подробности смотрите вnet.createServer()
и в событии'end'
. По умолчанию:false
.readable
<boolean>
Разрешить чтение на сокете, если переданfd
, в противном случае игнорируется. По умолчанию:false
.writable
<boolean>
Разрешить запись на сокет при передачеfd
, в противном случае игнорируется. По умолчанию:false
.signal
<AbortSignal>
Сигнал прерывания, который может быть использован для уничтожения сокета.
- Возвращает:
<net.Socket>
Создает новый объект сокета.
Созданный сокет может быть либо TCP сокетом, либо потоковой IPC конечной точкой, в зависимости от того, к чему он connect()
.
Событие: закрытие
¶
hadError
<boolean>
true
, если в сокете произошла ошибка передачи.
Выдается после полного закрытия сокета. Аргумент hadError
- это булево значение, которое говорит, был ли сокет закрыт из-за ошибки передачи.
Событие: `'connect``.¶
Выдается при успешном установлении сокетного соединения. См. net.createConnection()
.
Событие: 'data'
¶
Выдается при получении данных. Аргументом data
будет буфер
или строка
. Кодировка данных задается socket.setEncoding()
.
Данные будут потеряны, если нет слушателя, когда Socket
испускает событие 'data'
.
Событие: `'drain'``.¶
Испускается, когда буфер записи становится пустым. Может использоваться для дросселирования загрузки.
См. также: возвращаемые значения socket.write()
.
Событие: конец
.¶
Вызывается, когда другой конец сокета сигнализирует об окончании передачи данных, тем самым завершая доступную для чтения сторону сокета.
По умолчанию (allowHalfOpen
- false
) сокет посылает обратно пакет об окончании передачи и уничтожает свой файловый дескриптор после того, как выпишет очередь ожидающих записи. Однако, если allowHalfOpen
установлен в true
, сокет не будет автоматически end()
свою записываемую сторону, позволяя пользователю записывать произвольные объемы данных. Пользователь должен явно вызвать end()
, чтобы закрыть соединение (т.е. отправить обратно FIN-пакет).
Событие: ошибка
.¶
Выдается при возникновении ошибки. Событие 'close'
будет вызвано непосредственно после этого события.
Событие: 'lookup'
¶
Вызывается после разрешения имени хоста, но перед подключением. Не применимо к сокетам Unix.
err
{Error|null} Объект ошибки. См.dns.lookup()
.address
<string>
IP-адрес.family
<number>
|<null>
Тип адреса. См. [dns.lookup()
](dns.md#dnslookuphostname-optio
host
<string>
Имя хоста.
Событие: готово
.¶
Возникает, когда сокет готов к использованию.
Срабатывает сразу после 'connect'
.
Событие: 'timeout'
.¶
Испускается, если сокет завершает работу от бездействия. Это только уведомление о том, что сокет простаивал. Пользователь должен вручную закрыть соединение.
См. также: socket.setTimeout()
.
socket.address()
.¶
- Возвращает:
<Object>
Возвращает связанный адрес
, имя семейства
адресов и порт
сокета, как сообщает операционная система: { port: 12346, семейство: 'IPv4', адрес: '127.0.0.1' }
`socket.autoSelectFamilyAttemptedAddresses¶
Это свойство присутствует, только если алгоритм автовыбора семьи включен в socket.connect(options)
и представляет собой массив адресов, которые были опробованы.
Каждый адрес представляет собой строку в виде $IP:$PORT
. Если соединение было успешным, то последним адресом будет тот, к которому в данный момент подключен сокет.
socket.bufferSize
.¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Вместо этого используйте writable.writableLength
.
Это свойство показывает количество символов, буферизованных для записи. Буфер может содержать строки, длина которых после кодирования еще не известна. Поэтому это число является лишь приблизительным значением количества байт в буфере.
У net.Socket
есть свойство, что socket.write()
всегда работает. Это сделано для того, чтобы помочь пользователям быстро приступить к работе. Компьютер не всегда успевает за объемом данных, которые записываются в сокет. Просто сетевое соединение может быть слишком медленным. Node.js будет внутренне буферизировать данные, записанные в сокет, и отправлять их по проводу, когда это будет возможно.
Следствием этой внутренней буферизации является то, что память может увеличиваться. Пользователи, которые сталкиваются с большим или растущим bufferSize
, должны попытаться "дросселировать" потоки данных в своей программе с помощью socket.pause()
и socket.resume()
.
socket.bytesRead
¶
Количество полученных байтов.
socket.bytesWritten
.¶
Количество отправленных байтов.
socket.connect()
.¶
Инициирует соединение на заданном сокете.
Возможные сигнатуры:
socket.connect(options[, connectListener])
socket.connect(path[, connectListener])
для IPC соединений.socket.connect(port[, host][, connectListener])
для TCP-соединений.- Возвращает:
<net.Socket>
Сам сокет.
Эта функция является асинхронной. Когда соединение установлено, будет выдано событие 'connect'
. При возникновении проблем с подключением вместо события 'connect'
будет выдано событие 'error'
с передачей ошибки слушателю 'error'
. Последний параметр `conn
Эта функция должна использоваться только для повторного подключения сокета после того, как было выполнено закрытие
, иначе это может привести к неопределенному поведению.
socket.connect(options[, connectListener])
.¶
options
<Object>
connectListener
<Function>
Общий параметр методовsocket.connect()
. Будет добавлен в качестве слушателя для события'connect'
один раз.- Возвращает:
<net.Socket>
Сам сокет.
Инициирует соединение на заданном сокете. Обычно этот метод не нужен, сокет должен быть создан и открыт с помощью net.createConnection()
. Используйте этот метод только при реализации пользовательского Socket.
Для TCP-соединений доступны следующие опции
:
port
<number>
Требуется. Порт, к которому должен подключиться сокет.host
<string>
Хост, к которому должен подключаться сокет. По умолчанию:'localhost'
.localAddress
<string>
Локальный адрес, с которого должен подключаться сокет.localPort
<number>
Локальный порт, с которого должен подключаться сокет.family
<number>
: Версия стека IP. Должна быть4
,6
или0
. Значение0
указывает, что разрешены как IPv4, так и IPv6 адреса. По умолчанию:0
.hints
<number>
Необязательныеdns.lookup()
hints.lookup
<Function>
Пользовательская функция поиска. По умолчанию:dns.lookup()
.noDelay
<boolean>
Если установлено значениеtrue
, это отключает использование алгоритма Нагла сразу после установления сокета. По умолчанию:false
.keepAlive
<boolean>
Если установлено значениеtrue
, это включает функцию keep-alive на сокете сразу после установления соединения, аналогично тому, как это делается вsocket.setKeepAlive([enable][, initialDelay])
. По умолчанию:false
.keepAliveInitialDelay
<number>
Если задано положительное число, оно устанавливает начальную задержку перед отправкой первого зонда keepalive на незанятый сокет.Умолчанию:0
.autoSelectFamily
<boolean>
: Если установлено значениеtrue
, это включает алгоритм автоматического определения семейства, который слабо реализует секцию 5 из RFC 8305. Опцияall
, передаваемая в lookup, имеет значениеtrue
, и сокеты пытаются соединиться со всеми полученными адресами IPv6 и IPv4, последовательно, пока не будет установлено соединение. Первым пробует подключиться первый полученный AAAA-адрес, затем первый полученный A-адрес, затем второй полученный AAAA-адрес и так далее. Каждой попытке соединения дается время, заданное параметромautoSelectFamilyAttemptTimeout
, прежде чем произойдет тайминг и попытка установить соединение со следующим адресом. Игнорируется, если опцияfamily
не равна0
или если установленlocalAddress
. Ошибки соединения не выдаются, если хотя бы одно соединение успешно. По умолчанию: изначальноfalse
, но может быть изменен во время выполнения с помощьюnet.setDefaultAutoSelectFamily(value)
или с помощью опции командной строки--enable-network-family-autoselection
.- `auto
Для IPC соединений, доступными опциями
являются:
path
<string>
Требуется. Путь, к которому должен подключиться клиент. См. раздел Определение путей для IPC-соединений. Если указано, то вышеприведенные опции, специфичные для TCP, игнорируются.
Для обоих типов доступные опции
включают:
onread
<Object>
Если указано, входящие данные хранятся в одномбуфере
и передаются в указанныйобратный вызов
, когда данные поступают на сокет. Это приведет к тому, что функциональность потоковой передачи не будет предоставлять никаких данных. Сокет будет выдавать события типаошибка
,конец
изакрытие
как обычно. Такие методы, какpause()
иresume()
, также будут вести себя так, как ожидается.buffer
{Buffer|Uint8Array|Function} Либо многократно используемый кусок памяти для хранения входящих данных, либо функция, которая их возвращает.callback
<Function>
Эта функция вызывается для каждого куска входящих данных. Ей передаются два аргумента: количество байт, записанных вbuffer
, и ссылка наbuffer
. Возвратfalse
из этой функции позволяет неявноpause()
сокета. Эта функция будет выполняться в глобальном контексте.
Ниже приведен пример клиента, использующего опцию onread
:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
socket.connect(path[, connectListener])
.¶
path
<string>
Путь, к которому должен подключиться клиент. См. Определение путей для IPC-соединений.connectListener
<Function>
Общий параметр методовsocket.connect()
. Будет добавлен в качестве слушателя для события'connect'
один раз.- Возвращает:
<net.Socket>
Сам сокет.
Инициирует IPC соединение на данном сокете.
Псевдоним для socket.connect(options[, connectListener])
, вызываемого с {путь: path }
в качестве options
.
socket.connect(port[, host][, connectListener])
.¶
port
<number>
Порт, к которому должен подключиться клиент.host
<string>
Хост, к которому должен подключиться клиент.connectListener
<Function>
Общий параметр методовsocket.connect()
. Будет добавлен в качестве слушателя для события'connect'
один раз.- Возвращает:
<net.Socket>
Сам сокет.
Инициирует TCP-соединение на указанном сокете.
Псевдоним для socket.connect(options[, connectListener])
, вызываемого с {port: port, host: host}
в качестве options
.
socket.connecting
¶
Если true
, то socket.connect(options[, connectListener])
был вызван и еще не завершился. Это значение будет оставаться true
до тех пор, пока сокет не станет подключенным, затем оно будет установлено в false
и будет вызвано событие 'connect'
. Обратите внимание, что обратный вызов socket.connect(options[, connectListener])
является слушателем события 'connect'
.
socket.destroy([error])
.¶
error
<Object>
- Возвращает:
<net.Socket>
Убеждается, что на этом сокете больше не происходит никаких операций ввода-вывода. Уничтожает поток и закрывает соединение.
Подробности смотрите в writable.destroy()
.
socket.destroyed
¶
<boolean>
Указывает, уничтожено ли соединение или нет. После уничтожения соединения никакие данные больше не могут быть переданы с его помощью.
Подробности смотрите в writable.destroyed
.
socket.destroySoon()
.¶
Уничтожает сокет после записи всех данных. Если событие 'finish'' уже было вызвано, сокет уничтожается немедленно. Если сокет все еще доступен для записи, то неявно вызывается
socket.end()`.
socket.end([data[, encoding]][, callback])
.¶
data
{string|Buffer|Uint8Array}encoding
<string>
Используется только когда данные являютсяstring
. По умолчанию:'utf8'
.callback
<Function>
Необязательный обратный вызов для завершения работы сокета.- Возвращает:
<net.Socket>
Сам сокет.
Наполовину закрывает сокет, т.е. посылает пакет FIN. Возможно, сервер все еще будет посылать некоторые данные.
Подробности см. в writable.end()
.
socket.localAddress
.¶
Строковое представление локального IP-адреса, по которому подключается удаленный клиент. Для
socket.localPort
¶
Числовое представление локального порта. Например, 80
или 21
.
socket.localFamily
¶
Строковое представление семейства локальных IP-адресов. IPv4
или IPv6
.
socket.pause()
.¶
- Возвращает:
<net.Socket>
Сам сокет.
Приостанавливает чтение данных. То есть, события 'data'
не будут испускаться. Полезно для замедления загрузки.
socket.pending
¶
Это true
, если сокет еще не подключен, либо потому что .connect()
еще не был вызван, либо потому что он все еще находится в процессе подключения (см. socket.connecting
).
socket.ref()
.¶
- Возвращает:
<net.Socket>
Сам сокет.
В отличие от unref()
, вызов ref()
на ранее unref
ированном сокете не позволит программе завершиться, если это единственный оставшийся сокет (поведение по умолчанию). Если сокет ref
отрефлектирован, повторный вызов ref
не будет иметь никакого эффекта.
socket.remoteAddress
¶
Строковое представление удаленного IP-адреса. Например, 74.125.127.100
или 2001:4860:a005::68
. Значение может быть неопределенным
, если сокет уничтожен (например, если клиент отключился).
socket.remoteFamily
¶
Строковое представление семейства удаленных IP-адресов. IPv4
или IPv6
.
socket.remotePort
¶
Числовое представление удаленного порта. Например, 80
или 21
.
socket.resetAndDestroy()
.¶
- Возвращает:
<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])
¶
encoding
<string>
- Возвращает:
<net.Socket>
Сам сокет.
Устанавливает кодировку для сокета как Readable Stream. Смотрите readable.setEncoding()
для получения дополнительной информации.
socket.setKeepAlive([enable][, initialDelay])
.¶
enable
<boolean>
По умолчанию:false
.initialDelay
<number>
По умолчанию:0
- Возвращает:
<net.Socket>
Сам сокет.
Включает/выключает функцию keep-alive, а также опционально устанавливает начальную задержку перед отправкой первого зонда keepalive на незанятом сокете.
Задайте initialDelay
(в миллисекундах), чтобы установить задержку между последним полученным пакетом данных и первым запросом keepalive. Установка 0
для initialDelay
оставит значение неизменным по сравнению со значением по умолчанию (или предыдущим).
Включение функции keep-alive установит следующие параметры сокета:
SO_KEEPALIVE=1
TCP_KEEPIDLE=initialDelay
.
TCP_KEEPINTVL=1
socket.setNoDelay([noDelay])
¶
noDelay
<boolean>
По умолчанию:true
.- Возвращает:
<net.Socket>
Сам сокет.
Включить/выключить использование алгоритма Нагла.
Когда создается TCP-соединение, в нем будет включен алгоритм Нагла.
Алгоритм Нагла задерживает данные перед отправкой по сети. Он пытается оптимизировать пропускную способность за счет задержки.
Если передать true
для noDelay
или не передать аргумент, алгоритм Нагла будет отключен для сокета. Передача false
для noDelay
включит алгоритм Нагла.
socket.setTimeout(timeout[, callback])
.¶
timeout
<number>
callback
<Function>
- Возвращает:
<net.Socket>
Сам сокет.
Устанавливает таймаут сокета после timeout
миллисекунд бездействия сокета. По умолчанию net.Socket
не имеет тайм-аута.
При срабатывании тайм-аута сокет получит событие 'timeout'
, но соединение не будет разорвано. Пользователь должен вручную вызвать socket.end()
или socket.destroy()
для завершения соединения.
1 2 3 4 5 |
|
Если timeout
равен 0, то существующий таймаут простоя отключается.
Необязательный параметр callback
будет добавлен в качестве одноразового слушателя для события 'timeout'
.
socket.timeout
¶
- {number|undefined}
Таймаут сокета в миллисекундах, установленный socket.setTimeout()
. Это undefined
, если таймаут не был установлен.
socket.unref()
.¶
- Возвращает:
<net.Socket>
Сам сокет.
Вызов unref()
на сокете позволит программе завершить работу, если это единственный активный сокет в системе событий. Если сокет уже unref
, то повторный вызов unref()
не будет иметь никакого эффекта.
socket.write(data[, encoding][, callback])
.¶
data
{string|Buffer|Uint8Array}encoding
<string>
Используется только когда данные являютсяstring
. По умолчанию:utf8
.callback
<Function>
- Возвращает:
<boolean>
Отправляет данные по сокету. Второй параметр задает кодировку в случае строки. По умолчанию используется кодировка UTF8.
Возвращает true
, если все данные были успешно переданы в буфер ядра. Возвращает false
, если все данные или их часть были помещены в пользовательскую память. 'drain'
будет выдан, когда буфер снова освободится.
Необязательный параметр callback
будет выполнен, когда данные будут окончательно записаны, что может произойти не сразу.
Для получения дополнительной информации смотрите метод Writable
stream write()
.
socket.readyState
¶
Это свойство представляет состояние соединения в виде строки.
- Если поток соединяется,
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])
.¶
options
<Object>
connectListener
<Function>
- Возвращает:
<net.Socket>
Псевдоним для net.createConnection(options[, connectListener])
.
net.connect(path[, connectListener])
.¶
path
<string>
connectListener
<Function>
- Возвращает:
<net.Socket>
Псевдоним для net.createConnection(path[, connectListener])
.
net.connect(port[, host][, connectListener])
.¶
port
<number>
host
<string>
connectListener
<Function>
- Возвращает:
<net.Socket>
Псевдоним для net.createConnection(port[, host][, connectListener])
.
net.createConnection()
.¶
Фабрика
Когда соединение будет установлено, на возвращенном сокете произойдет событие 'connect'
. Последний параметр connectListener
, если он указан, будет добавлен в качестве слушателя для события 'connect'
once.
Возможные сигнатуры:
net.createConnection(options[, connectListener])
net.createConnection(path[, connectListener])
для IPC соединений.net.createConnection(port[, host][, connectListener])
для TCP-соединений.
Функция net.connect()
является псевдонимом этой функции.
net.createConnection(options[, connectListener])
.¶
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()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Для подключения к сокету /tmp/echo.sock
:
1 2 3 |
|
net.createConnection(path[, connectListener])
.¶
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])
.¶
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])
.¶
-
options
<Object>
allowHalfOpen
<boolean>
Если установлено значениеfalse
, то сокет будет автоматически завершать доступную для записи сторону, когда заканчивается доступная для чтения сторона. По умолчанию:false
.pauseOnConnect
<boolean>
Указывает, должен ли сокет приостанавливаться при входящих соединениях. По умолчанию:false
.noDelay
<boolean>
Если установлено значениеtrue
, то отключает использование алгоритма Нагла сразу после получения нового входящего соединения. По умолчанию:false
.keepAlive
<boolean>
Если установлено значениеtrue
, это включает функцию keep-alive на сокете сразу после получения нового входящего соединения, аналогично тому, как это делается вsocket.setKeepAlive([enable][, initialDelay])
. По умолчанию:false
.keepAliveInitialDelay
<number>
Если установлено положительное число
-
connectionListener
<Function>
Автоматически устанавливается в качестве слушателя для события'соединение'
. -
Возвращает: {net.Server}
Создает новый TCP или IPC сервер.
Если allowHalfOpen
установлено в true
, когда другой конец сокета сигнализирует об окончании передачи, сервер будет отправлять ответное сообщение об окончании передачи только при явном вызове socket.end()
. Например, в контексте TCP, при получении FIN-пакета, FIN-пакет отправляется обратно только при явном вызове socket.end()
. До этого момента соединение является полузакрытым (не читаемым, но все еще доступным для записи). Дополнительную информацию см. в 'end'
event и RFC 1122 (раздел 4.2.2.13).
Если pauseOnConnect
имеет значение true
, то сокет, связанный с каждым входящим соединением, будет приостановлен, и данные с его хэндла не будут считываться. Это позволяет передавать соединения между процессами без чтения данных исходным процессом. Чтобы начать чтение данных из приостановленного сокета, вызовите socket.resume()
.
Сервер может быть TCP-сервером или IPC сервером, в зависимости от того, что он listen()
слушает.
Вот пример эхо-сервера TCP, который прослушивает соединения на порту 8124:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Проверьте это с помощью telnet
:
1 |
|
Для прослушивания сокета /tmp/echo.sock
:
1 2 3 |
|
Используйте nc
для подключения к серверу сокетов домена Unix:
1 |
|
net.getDefaultAutoSelectFamily()
.¶
Получает текущее значение по умолчанию опции autoSelectFamily
опции socket.connect(options)
.
- Возвращает:
<boolean>
Текущее значение по умолчанию опцииautoSelectFamily
.
net.setDefaultAutoSelectFamily(value)
.¶
Устанавливает значение по умолчанию опции autoSelectFamily
в socket.connect(options)
.
value
<boolean>
Новое значение по умолчанию. Первоначальное значение по умолчанию -false
.
net.getDefaultAutoSelectFamilyAttemptTimeout()
.¶
Получает текущее значение по умолчанию опции autoSelectFamilyAttemptTimeout
параметра socket.connect(options)
.
- Возвращает:
<number>
Текущее значение по умолчанию опцииautoSelectFamilyAttemptTimeout
.
net.setDefaultAutoSelectFamilyAttemptTimeout(value)
.¶
Устанавливает значение по умолчанию опции autoSelectFamilyAttemptTimeout
параметра socket.connect(options)
.
value
<number>
Новое значение по умолчанию, которое должно быть положительным числом. Если число меньше10
, вместо него используется значение10
. Начальное значение по умолчанию равно250
.
net.isIP(input)
¶
Возвращает 6
, если input
является IPv6-адресом. Возвращает 4
, если input
- это IPv4-адрес в точечно-десятичной нотации без ведущих нулей. В противном случае возвращается 0
.
1 2 3 4 5 |
|
net.isIPv4(input)
¶
Возвращает true
, если input
является IPv4-адресом в точечно-десятичной нотации без ведущих нулей. В противном случае возвращается false
.
1 2 3 4 |
|
net.isIPv6(input)
¶
Возвращает true
, если input
является адресом IPv6. В противном случае возвращает false
.
1 2 |
|