net
Стабильность: 2 — стабильный
Модуль node:net предоставляет асинхронный сетевой API для создания серверов на основе потоков TCP или IPC (createServer) и клиентов (createConnection).
К нему можно обратиться с помощью:
import net from 'node:net';
Использование в Deno
import * as mod from "node:net";
class BlockList
Использование в Deno
import { BlockList } from "node:net";
Объект BlockList можно использовать с некоторыми сетевыми API для задания правил, запрещающих входящий или исходящий доступ к определённым IP-адресам, диапазонам IP-адресов или IP-подсетям.
Свойства
rules: readonly string[] Список правил, добавленных в список блокировки.
Методы
addAddress(
address: string,
type?: IPVersion,
): void Добавляет правило для блокировки указанного IP-адреса.
addAddress(address: SocketAddress): void Добавляет правило для блокировки диапазона IP-адресов от start (включительно) доend (включительно).
addRange(
start: SocketAddress,
end: SocketAddress,
): void addSubnet(
net: SocketAddress,
prefix: number,
): void Добавляет правило для блокировки диапазона IP-адресов, заданного маской подсети.
check(address: SocketAddress): 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')); // Prints: true
console.log(blockList.check('10.0.0.3')); // Prints: true
console.log(blockList.check('222.111.111.222')); // Prints: false
// IPv6 notation for IPv4 addresses works:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true
Статические методы
isBlockList(value: unknown): value is BlockList Возвращает true, если value является net.BlockList.
class Server
Использование в Deno
import { Server } from "node:net";
Этот класс используется для создания сервера TCP или IPC.
Конструкторы
Server(connectionListener?: (socket: Socket) => void) Server(
options?: ServerOpts,
connectionListener?: (socket: Socket) => void,
) Свойства
connections: number listening: boolean Показывает, прослушивает ли сервер соединения.
maxConnections: number Задайте это свойство, чтобы отклонять соединения, когда их число на сервере становится слишком большим.
Не рекомендуется использовать этот параметр после передачи сокета дочернему процессу с помощью child_process.fork().
Методы
[Symbol.asyncDispose](): Promise<void> Вызывает Server.close() и возвращает промис, который выполняется после закрытия сервера.
addListener(
event: string,
listener: (...args: any[]) => void,
): this events.EventEmitter
- close
- connection
- error
- listening
- drop
addListener(
event: "close",
listener: () => void,
): this addListener(
event: "connection",
listener: (socket: Socket) => void,
): this addListener(
event: "error",
listener: (err: Error) => void,
): this addListener(
event: "listening",
listener: () => void,
): this addListener(
event: "drop",
listener: (data?: DropArgument) => void,
): this address(): Возвращает привязанный 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) => {
// Handle errors here.
throw err;
});
// Grab an arbitrary unused port.
server.listen(() => {
console.log('opened server on', server.address());
});
server.address() возвращает null до генерации события 'listening' или после вызова server.close().
close(callback?: (err?: Error) => void): this Прекращает принимать новые соединения, сохраняя существующие. Эта функция асинхронная; сервер окончательно закрывается, когда все соединения завершены и сервер генерирует событие 'close'. Необязательный callback будет вызван при наступлении события 'close'. В отличие от этого события, он будет вызван с Error в качестве единственного аргумента, если сервер был закрыт, когда не был открыт.
emit(
event: string | symbol,
...args: any[],
): boolean emit(event: "close"): boolean emit(
event: "error",
err: Error,
): boolean emit(event: "listening"): boolean emit(
event: "drop",
data?: DropArgument,
): boolean getConnections(cb: (
error: Error | null,
count: number,
) => void): void Асинхронно получает число одновременных соединений на сервере. Работает, если сокеты были переданы дочерним процессам.
Функция обратного вызова должна принимать два аргумента: err и count.
listen(
port?: number,
hostname?: string,
backlog?: number,
listeningListener?: () => void,
): this Запускает сервер, который прослушивает соединения. В зависимости от того, что он прослушивает, 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).
Для всех объектов 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);
}
});
listen(
port?: number,
hostname?: string,
listeningListener?: () => void,
): this listen(
port?: number,
backlog?: number,
listeningListener?: () => void,
): this listen(
port?: number,
listeningListener?: () => void,
): this listen(
path: string,
backlog?: number,
listeningListener?: () => void,
): this listen(
path: string,
listeningListener?: () => void,
): this listen(
options: ListenOptions,
listeningListener?: () => void,
): this listen(
handle: any,
backlog?: number,
listeningListener?: () => void,
): this listen(
handle: any,
listeningListener?: () => void,
): this on(
event: string,
listener: (...args: any[]) => void,
): this on(
event: "close",
listener: () => void,
): this on(
event: "error",
listener: (err: Error) => void,
): this on(
event: "listening",
listener: () => void,
): this on(
event: "drop",
listener: (data?: DropArgument) => void,
): this once(
event: string,
listener: (...args: any[]) => void,
): this once(
event: "close",
listener: () => void,
): this once(
event: "error",
listener: (err: Error) => void,
): this once(
event: "listening",
listener: () => void,
): this once(
event: "drop",
listener: (data?: DropArgument) => void,
): this prependListener(
event: string,
listener: (...args: any[]) => void,
): this prependListener(
event: "close",
listener: () => void,
): this prependListener(
event: "connection",
listener: (socket: Socket) => void,
): this prependListener(
event: "error",
listener: (err: Error) => void,
): this prependListener(
event: "listening",
listener: () => void,
): this prependListener(
event: "drop",
listener: (data?: DropArgument) => void,
): this prependOnceListener(
event: string,
listener: (...args: any[]) => void,
): this prependOnceListener(
event: "close",
listener: () => void,
): this prependOnceListener(
event: "connection",
listener: (socket: Socket) => void,
): this prependOnceListener(
event: "error",
listener: (err: Error) => void,
): this prependOnceListener(
event: "listening",
listener: () => void,
): this prependOnceListener(
event: "drop",
listener: (data?: DropArgument) => void,
): this ref(): this Противоположность unref(): вызов ref() для сервера, которому ранее был вызван unref, не позволит программе завершиться, если это единственный оставшийся сервер (поведение по умолчанию). Если для сервера уже был вызван ref, повторный вызов ref() ничего не изменит.
unref(): this Вызов unref() для сервера позволит программе завершиться, если это единственный активный сервер в системе событий. Если для сервера уже был вызван unref, повторный вызовunref() ничего не изменит.
класс Socket
Использование в Deno
import { Socket } from "node:net";
Параметр fd не поддерживается.
Этот класс представляет собой абстракцию TCP-сокета или потоковой конечной точки IPC (в Windows используются именованные каналы, а в остальных системах — доменные сокеты Unix). Это также EventEmitter.
Пользователь может создать net.Socket и напрямую использовать его для взаимодействия с сервером. Например, он возвращается функцией createConnection, чтобы пользователь мог обмениваться данными с сервером.
Также он может быть создан Node.js и передан пользователю при получении соединения. Например, он передаётся обработчикам события 'connection', генерируемого объектом Server, чтобы пользователь мог взаимодействовать с клиентом.
Конструкторы
Socket(options?: SocketConstructorOpts) Свойства
autoSelectFamilyAttemptedAddresses: string[] Это свойство присутствует только в том случае, если в socket.connect(options) включён алгоритм автоматического выбора семейства адресов. Оно представляет собой массив адресов, попытки подключения к которым уже предпринимались.
Каждый адрес представлен строкой в формате $IP:$PORT. Если подключение прошло успешно, последний адрес — это адрес, к которому в данный момент подключён сокет.
bufferSize: number Это свойство показывает количество символов, буферизованных для записи. Буфер может содержать строки, длина которых после кодирования пока неизвестна. Поэтому это число лишь приблизительно отражает количество байтов в буфере.
Для net.Socket характерно, что socket.write() всегда работает. Это упрощает пользователям начало работы. Компьютер не всегда может обрабатывать данные с той же скоростью, с какой они записываются в сокет. Сетевое соединение может оказаться слишком медленным. Node.js будет помещать данные, записанные в сокет, во внутреннюю очередь и отправлять их по сети, когда это станет возможно.
Из-за такой внутренней буферизации объём используемой памяти может увеличиваться. Пользователям, столкнувшимся с большим или растущим значением bufferSize, следует попытаться «ограничить скорость» потоков данных в своей программе с помощью socket.pause() и socket.resume().
bytesRead: number Количество полученных байтов.
bytesWritten: number Количество отправленных байтов.
connecting: boolean Если true, был вызван socket.connect(options[, connectListener]), выполнение которого ещё не завершилось. Значение останется true, пока сокет не подключится; затем оно изменится на false и будет сгенерировано событие 'connect'. Обратите внимание, что обратный вызов socket.connect(options[, connectListener]) является обработчиком события 'connect'.
destroyed: boolean Подробнее см. writable.destroyed.
localAddress: string Строковое представление локального IP-адреса, по которому подключается удалённый клиент. Например, если сервер прослушивает '0.0.0.0', а клиент подключается по адресу '192.168.1.1', значение socket.localAddress будет '192.168.1.1'.
localFamily: string Строковое представление семейства локального IP-адреса: 'IPv4' или 'IPv6'.
localPort: number Числовое представление локального порта. Например, 80 или 21.
pending: boolean Значение равно true, если сокет ещё не подключён: либо потому, что .connect() ещё не был вызван, либо потому, что подключение всё ещё выполняется (см. socket.connecting).
readyState: SocketReadyState Это свойство представляет состояние соединения в виде строки.
- Если поток подключается,
socket.readyStateимеет значениеopening. - Если поток доступен для чтения и записи, оно имеет значение
open. - Если поток доступен для чтения, но не для записи, оно имеет значение
readOnly. - Если поток недоступен для чтения и доступен для записи, оно имеет значение
writeOnly.
remoteAddress: string | undefined Строковое представление удалённого IP-адреса. Например, '74.125.127.100' или '2001:4860:a005::68'. Значение может быть undefined, если сокет уничтожен (например, если клиент отключился).
remoteFamily: string | undefined Строковое представление семейства удалённого IP-адреса: 'IPv4' или 'IPv6'. Значение может быть undefined, если сокет уничтожен (например, если клиент отключился).
remotePort: number | undefined Числовое представление удалённого порта. Например, 80 или 21. Значение может быть undefined, если сокет уничтожен (например, если клиент отключился).
timeout: number | undefined Тайм-аут сокета в миллисекундах, заданный с помощью socket.setTimeout(). Если тайм-аут не задан, значение равно undefined.
Методы
addListener(
event: string,
listener: (...args: any[]) => void,
): this events.EventEmitter
- close
- connect
- connectionAttempt
- connectionAttemptFailed
- connectionAttemptTimeout
- data
- drain
- end
- error
- lookup
- ready
- timeout
addListener(
event: "close",
listener: (hadError: boolean) => void,
): this addListener(
event: "connect",
listener: () => void,
): this addListener(
event: "connectionAttempt",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this addListener(
event: "connectionAttemptFailed",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this addListener(
event: "connectionAttemptTimeout",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this addListener(
event: "data",
listener: (data: Buffer) => void,
): this addListener(
event: "drain",
listener: () => void,
): this addListener(
event: "end",
listener: () => void,
): this addListener(
event: "error",
listener: (err: Error) => void,
): this addListener(
event: "lookup",
listener: (
err: Error,
address: string,
family: string | number,
host: string,
) => void,
): this addListener(
event: "ready",
listener: () => void,
): this addListener(
event: "timeout",
listener: () => void,
): this address(): AddressInfo | { } Возвращает привязанный address, имя адреса family и port сокета, полученные от операционной системы:{ port: 12346, family: 'IPv4', address: '127.0.0.1' }
connect(
options: SocketConnectOpts,
connectionListener?: () => void,
): this Инициирует соединение через указанный сокет.
Возможные сигнатуры:
socket.connect(options[, connectListener])-
socket.connect(path[, connectListener])для соединенийIPC. -
socket.connect(port[, host][, connectListener])для TCP-соединений. - Возвращает:
net.SocketСам сокет.
Эта функция асинхронная. После установления соединения будет сгенерировано событие 'connect'. Если при подключении возникнет проблема, вместо события 'connect' будет сгенерировано событие 'error', а ошибка будет передана обработчику 'error'. Последний параметр connectListener, если он указан, будет добавлен в качестве обработчика события 'connect', который сработает один раз.
Эту функцию следует использовать только для повторного подключения сокета после генерации события 'close', иначе поведение может быть неопределённым.
connect(
port: number,
host: string,
connectionListener?: () => void,
): this connect(
port: number,
connectionListener?: () => void,
): this connect(
path: string,
connectionListener?: () => void,
): this destroySoon(): void Уничтожает сокет после записи всех данных. Если событие finish уже было сгенерировано, сокет уничтожается немедленно. Если сокет всё ещё доступен для записи, неявно вызывается socket.end().
emit(
event: string | symbol,
...args: any[],
): boolean emit(
event: "close",
hadError: boolean,
): boolean emit(event: "connect"): boolean emit(
event: "connectionAttempt",
ip: string,
port: number,
family: number,
): boolean emit(
event: "connectionAttemptFailed",
ip: string,
port: number,
family: number,
): boolean emit(
event: "connectionAttemptTimeout",
ip: string,
port: number,
family: number,
): boolean emit(
event: "data",
data: Buffer,
): boolean emit(event: "drain"): boolean emit(event: "end"): boolean emit(
event: "error",
err: Error,
): boolean emit(
event: "lookup",
err: Error,
address: string,
family: string | number,
host: string,
): boolean emit(event: "ready"): boolean emit(event: "timeout"): boolean end(callback?: () => void): this Частично закрывает сокет, то есть отправляет пакет FIN. Сервер всё ещё может отправить некоторые данные.
Подробнее см. writable.end().
end(
buffer: Uint8Array | string,
callback?: () => void,
): this end(
str: Uint8Array | string,
encoding?: BufferEncoding,
callback?: () => void,
): this on(
event: string,
listener: (...args: any[]) => void,
): this on(
event: "close",
listener: (hadError: boolean) => void,
): this on(
event: "connect",
listener: () => void,
): this on(
event: "connectionAttempt",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this on(
event: "connectionAttemptFailed",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this on(
event: "connectionAttemptTimeout",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this on(
event: "data",
listener: (data: Buffer) => void,
): this on(
event: "drain",
listener: () => void,
): this on(
event: "end",
listener: () => void,
): this on(
event: "error",
listener: (err: Error) => void,
): this on(
event: "lookup",
listener: (
err: Error,
address: string,
family: string | number,
host: string,
) => void,
): this on(
event: "ready",
listener: () => void,
): this on(
event: "timeout",
listener: () => void,
): this once(
event: string,
listener: (...args: any[]) => void,
): this once(
event: "close",
listener: (hadError: boolean) => void,
): this once(
event: "connectionAttempt",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this once(
event: "connectionAttemptFailed",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this once(
event: "connectionAttemptTimeout",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this once(
event: "connect",
listener: () => void,
): this once(
event: "data",
listener: (data: Buffer) => void,
): this once(
event: "drain",
listener: () => void,
): this once(
event: "end",
listener: () => void,
): this once(
event: "error",
listener: (err: Error) => void,
): this once(
event: "lookup",
listener: (
err: Error,
address: string,
family: string | number,
host: string,
) => void,
): this once(
event: "ready",
listener: () => void,
): this once(
event: "timeout",
listener: () => void,
): this pause(): this Приостанавливает чтение данных. То есть события 'data' генерироваться не будут. Полезно для ограничения скорости отправки данных.
prependListener(
event: string,
listener: (...args: any[]) => void,
): this prependListener(
event: "close",
listener: (hadError: boolean) => void,
): this prependListener(
event: "connect",
listener: () => void,
): this prependListener(
event: "connectionAttempt",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this prependListener(
event: "connectionAttemptFailed",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this prependListener(
event: "connectionAttemptTimeout",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this prependListener(
event: "data",
listener: (data: Buffer) => void,
): this prependListener(
event: "drain",
listener: () => void,
): this prependListener(
event: "end",
listener: () => void,
): this prependListener(
event: "error",
listener: (err: Error) => void,
): this prependListener(
event: "lookup",
listener: (
err: Error,
address: string,
family: string | number,
host: string,
) => void,
): this prependListener(
event: "ready",
listener: () => void,
): this prependListener(
event: "timeout",
listener: () => void,
): this prependOnceListener(
event: string,
listener: (...args: any[]) => void,
): this prependOnceListener(
event: "close",
listener: (hadError: boolean) => void,
): this prependOnceListener(
event: "connect",
listener: () => void,
): this prependOnceListener(
event: "connectionAttempt",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this prependOnceListener(
event: "connectionAttemptFailed",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this prependOnceListener(
event: "connectionAttemptTimeout",
listener: (
ip: string,
port: number,
family: number,
) => void,
): this prependOnceListener(
event: "data",
listener: (data: Buffer) => void,
): this prependOnceListener(
event: "drain",
listener: () => void,
): this prependOnceListener(
event: "end",
listener: () => void,
): this prependOnceListener(
event: "error",
listener: (err: Error) => void,
): this prependOnceListener(
event: "lookup",
listener: (
err: Error,
address: string,
family: string | number,
host: string,
) => void,
): this prependOnceListener(
event: "ready",
listener: () => void,
): this prependOnceListener(
event: "timeout",
listener: () => void,
): this ref(): this В отличие от unref(), вызов ref() для ранее unref сокета не позволит программе завершиться, если этот сокет остался единственным (поведение по умолчанию). Если сокет уже ref, повторный вызов ref не даст эффекта.
resetAndDestroy(): this Закрывает TCP-соединение, отправляя пакет RST, и уничтожает поток. Если TCP-сокет находится в процессе подключения, он отправит пакет RST и уничтожит этот TCP-сокет после подключения. В противном случае будет вызван socket.destroy с ошибкой ERR_SOCKET_CLOSED. Если это не TCP-сокет (например, канал), вызов этого метода немедленно приведёт к ошибке ERR_INVALID_HANDLE_TYPE.
resume(): this Возобновляет чтение после вызова socket.pause().
setEncoding(encoding?: BufferEncoding): this Задаёт кодировку сокета как Readable Stream. Подробнее см. readable.setEncoding().
setKeepAlive(
enable?: boolean,
initialDelay?: number,
): this Включает или отключает функцию keep-alive и, при необходимости, задаёт начальную задержку перед отправкой первого keep-alive-запроса через неактивный сокет.
Задайте initialDelay (в миллисекундах), чтобы установить задержку между получением последнего пакета данных и отправкой первого keep-alive-запроса. Если для initialDelay задано значение 0, значение останется без изменений относительно настройки по умолчанию (или предыдущей настройки).
При включении функции keep-alive будут заданы следующие параметры сокета:
SO_KEEPALIVE=1TCP_KEEPIDLE=initialDelayTCP_KEEPCNT=10TCP_KEEPINTVL=1
setNoDelay(noDelay?: boolean): this Включает или отключает алгоритм Нейгла.
При создании TCP-соединения алгоритм Нейгла включён.
Алгоритм Нейгла задерживает отправку данных по сети. Он пытается оптимизировать пропускную способность за счёт увеличения задержки.
Передача true для noDelay или отсутствие аргумента отключает алгоритм Нейгла для сокета. Передача false для noDelay включает алгоритм Нейгла.
setTimeout(
timeout: number,
callback?: () => void,
): this Устанавливает тайм-аут сокета, который срабатывает после timeout миллисекунд бездействия. По умолчанию у net.Socket нет тайм-аута.
При срабатывании тайм-аута бездействия сокет получит событие 'timeout', но соединение не будет разорвано. Пользователь должен вручную вызвать socket.end() или socket.destroy(), чтобы завершить соединение.
socket.setTimeout(3000);
socket.on('timeout', () => {
console.log('socket timeout');
socket.end();
});
Если timeout равно 0, существующий тайм-аут бездействия отключается.
Необязательный параметр callback будет добавлен как одноразовый обработчик события 'timeout'.
unref(): this Вызов unref() для сокета позволит программе завершиться, если этот сокет — единственный активный сокет в системе событий. Если сокет уже unref, повторный вызов unref() не даст эффекта.
write(
buffer: Uint8Array | string,
cb?: (err?: Error) => void,
): boolean Отправляет данные через сокет. Второй параметр задаёт кодировку, если передана строка. По умолчанию используется кодировка UTF8.
Возвращает true, если все данные успешно переданы в буфер ядра. Возвращает false, если все данные или их часть поставлены в очередь в пользовательской памяти. Событие 'drain' будет сгенерировано, когда буфер снова освободится.
Необязательный параметр callback будет выполнен после фактической записи данных, которая может произойти не сразу.
Подробнее см. метод write() потока Writable.
write(
str: Uint8Array | string,
encoding?: BufferEncoding,
cb?: (err?: Error) => void,
): boolean класс SocketAddress
Использование в Deno
import { SocketAddress } from "node:net";
Конструкторы
SocketAddress(options: SocketAddressInitOptions) Свойства
Статические методы
parse(input: string): SocketAddress | undefined функция connect
Использование в Deno
import { connect } from "node:net";
Перегрузка 1
connect(
options: NetConnectOpts,
connectionListener?: () => void,
): SocketЯвляется псевдонимом для createConnection.
Возможные сигнатуры:
Параметры
options: NetConnectOpts connectionListener: () => void Возвращаемый тип
Перегрузка 2
connect(
port: number,
host?: string,
connectionListener?: () => void,
): SocketПараметры
port: number host: string connectionListener: () => void Возвращаемый тип
Перегрузка 3
функция createConnection
Использование в Deno
import { createConnection } from "node:net";
Перегрузка 1
createConnection(
options: NetConnectOpts,
connectionListener?: () => void,
): SocketФабричная функция, которая создает новый Socket, немедленно устанавливает соединение с socket.connect(), а затем возвращает net.Socket, запускающий подключение.
После установки соединения на возвращенном сокете будет сгенерировано событие 'connect'. Последний параметр connectListener, если он указан, будет добавлен в качестве обработчика события 'connect' однократно.
Возможные сигнатуры:
- createConnection
-
createConnection для соединений
IPC. - createConnection для TCP-соединений.
Функция connect является псевдонимом этой функции.
Параметры
options: NetConnectOpts connectionListener: () => void Возвращаемый тип
Перегрузка 2
createConnection(
port: number,
host?: string,
connectionListener?: () => void,
): SocketПараметры
port: number host: string connectionListener: () => void Возвращаемый тип
Перегрузка 3
функция createServer
Использование в Deno
import { createServer } from "node:net";
Перегрузка 1
createServer(connectionListener?: (socket: Socket) => void): ServerСоздает новый TCP- или IPC-сервер.
Если для allowHalfOpen задано значение true, при получении от другого конца сокета сигнала о завершении передачи сервер отправит сигнал о завершении передачи только после явного вызова socket.end(). Например, в контексте TCP, когда получен пакет FIN, ответный пакет FIN отправляется только после явного вызова socket.end(). До этого момента соединение остается полуоткрытым (данные нельзя читать, но можно записывать). Дополнительные сведения см. в событии 'end' и в RFC 1122 (раздел 4.2.2.13).
Если для pauseOnConnect задано значение true, связанный с каждым входящим соединением сокет будет приостановлен, и данные из его дескриптора считываться не будут. Это позволяет передавать соединения между процессами, не считывая данные в исходном процессе. Чтобы начать считывание данных из приостановленного сокета, вызовите socket.resume().
В зависимости от того, к чему он listen(), сервер может быть TCP-сервером или сервером IPC.
Ниже приведен пример TCP-сервера эхо, который принимает соединения на порту 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');
});
Проверьте его с помощью telnet:
telnet localhost 8124
Чтобы принимать подключения на сокете /tmp/echo.sock:
server.listen('/tmp/echo.sock', () => {
console.log('server bound');
});
Используйте nc для подключения к серверу доменного сокета Unix:
nc -U /tmp/echo.sock
Параметры
connectionListener: (socket: Socket) => void Автоматически устанавливается в качестве обработчика события 'connection'.
Возвращаемый тип
Перегрузка 2
createServer(
options?: ServerOpts,
connectionListener?: (socket: Socket) => void,
): ServerПараметры
options: ServerOpts connectionListener: (socket: Socket) => void Возвращаемый тип
функция getDefaultAutoSelectFamily
Использование в Deno
import { getDefaultAutoSelectFamily } from "node:net";
getDefaultAutoSelectFamily(): booleanВозвращает текущее значение по умолчанию параметра autoSelectFamily объекта socket.connect(options). Изначальное значение по умолчанию — true, если не указан параметр командной строки --no-network-family-autoselection.
Возвращаемый тип
boolean функция getDefaultAutoSelectFamilyAttemptTimeout
Использование в Deno
import { getDefaultAutoSelectFamilyAttemptTimeout } from "node:net";
getDefaultAutoSelectFamilyAttemptTimeout(): numberВозвращает текущее значение по умолчанию параметра autoSelectFamilyAttemptTimeout объекта socket.connect(options). Изначальное значение по умолчанию — 250 или значение, заданное с помощью параметра командной строки --network-family-autoselection-attempt-timeout.
Возвращаемый тип
number Текущее значение по умолчанию параметра autoSelectFamilyAttemptTimeout.
функция isIP
Использование в Deno
import { isIP } from "node:net";
isIP(input: string): numberВозвращает 6, если input является адресом IPv6. Возвращает 4, если input является адресом IPv4 в точечной десятичной нотации без ведущих нулей. В противном случае возвращает 0.
net.isIP('::1'); // returns 6
net.isIP('127.0.0.1'); // returns 4
net.isIP('127.000.000.001'); // returns 0
net.isIP('127.0.0.1/24'); // returns 0
net.isIP('fhqwhgads'); // returns 0
Параметры
input: string Возвращаемый тип
number функция isIPv4
Использование в Deno
import { isIPv4 } from "node:net";
isIPv4(input: string): booleanВозвращает true, если input является адресом IPv4 в точечной десятичной нотации без ведущих нулей. В противном случае возвращает false.
net.isIPv4('127.0.0.1'); // returns true
net.isIPv4('127.000.000.001'); // returns false
net.isIPv4('127.0.0.1/24'); // returns false
net.isIPv4('fhqwhgads'); // returns false
Параметры
input: string Возвращаемый тип
boolean функция isIPv6
Использование в Deno
import { isIPv6 } from "node:net";
isIPv6(input: string): booleanВозвращает true, если input является адресом IPv6. В противном случае возвращает false.
net.isIPv6('::1'); // returns true
net.isIPv6('fhqwhgads'); // returns false
Параметры
input: string Возвращаемый тип
boolean функция setDefaultAutoSelectFamily
Использование в Deno
import { setDefaultAutoSelectFamily } from "node:net";
setDefaultAutoSelectFamily(value: boolean): voidЗадает значение по умолчанию параметра autoSelectFamily объекта socket.connect(options).
Параметры
value: boolean Новое значение по умолчанию. Изначальное значение по умолчанию — true, если не указан параметр командной строки --no-network-family-autoselection.
Возвращаемый тип
void функция setDefaultAutoSelectFamilyAttemptTimeout
Использование в Deno
import { setDefaultAutoSelectFamilyAttemptTimeout } from "node:net";
setDefaultAutoSelectFamilyAttemptTimeout(value: number): voidЗадает значение по умолчанию параметра autoSelectFamilyAttemptTimeout объекта socket.connect(options).
Параметры
value: number Новое значение по умолчанию должно быть положительным числом. Если число меньше 10, вместо него используется значение 10. Изначальное значение по умолчанию — 250 или значение, заданное с помощью параметра командной строки --network-family-autoselection-attempt-timeout.
Возвращаемый тип
void интерфейс AddressInfo
Использование в Deno
import { type AddressInfo } from "node:net";
интерфейс DropArgument
Использование в Deno
import { type DropArgument } from "node:net";
Свойства
localAddress: string localPort: number localFamily: string remoteAddress: string remotePort: number remoteFamily: string интерфейс IpcNetConnectOpts
Использование в Deno
import { type IpcNetConnectOpts } from "node:net";
Свойства
timeout: number | undefined интерфейс IpcSocketConnectOpts
Использование в Deno
import { type IpcSocketConnectOpts } from "node:net";
Свойства
path: string интерфейс ListenOptions
Использование в Deno
import { type ListenOptions } from "node:net";
Свойства
backlog: number | undefined exclusive: boolean | undefined host: string | undefined ipv6Only: boolean | undefined reusePort: boolean | undefined path: string | undefined port: number | undefined readableAll: boolean | undefined writableAll: boolean | undefined интерфейс OnReadOpts
Использование в Deno
import { type OnReadOpts } from "node:net";
Свойства
buffer: Uint8Array | (() => Uint8Array) Методы
callback(
bytesWritten: number,
buffer: Uint8Array,
): boolean Эта функция вызывается для каждого фрагмента входящих данных. Ей передаются два аргумента: количество байтов, записанных в buffer, и ссылка на buffer. Возвратите false из этой функции, чтобы неявно pause() сокет.
интерфейс ServerOpts
Использование в Deno
import { type ServerOpts } from "node:net";
Свойства
allowHalfOpen: boolean | undefined Указывает, разрешены ли полуоткрытые TCP-соединения.
pauseOnConnect: boolean | undefined Указывает, следует ли приостанавливать сокет при входящих подключениях.
noDelay: boolean | undefined Если задано значение true, алгоритм Нейгла отключается сразу после установления нового входящего соединения.
keepAlive: boolean | undefined Если задано значение true, функция keep-alive включается для сокета сразу после установления нового входящего соединения, аналогично тому, как это делается в socket.setKeepAlive([enable][, initialDelay]).
keepAliveInitialDelay: number | undefined Если задано положительное число, оно задает начальную задержку перед отправкой первого keepalive-зонда через простаивающий сокет.
highWaterMark: number | undefined При необходимости переопределяет net.Sockets' readableHighWaterMark и writableHighWaterMark.
blockList можно использовать для блокировки входящего доступа с определенных IP-адресов, диапазонов IP-адресов или подсетей IP. Это не работает, если сервер находится за обратным прокси-сервером, NAT и т. д., поскольку с адресом в списке блокировки сравнивается адрес прокси-сервера или адрес, указанный NAT.
интерфейс SocketAddressInitOptions
Использование в Deno
import { type SocketAddressInitOptions } from "node:net";
интерфейс SocketConstructorOpts
Использование в Deno
import { type SocketConstructorOpts } from "node:net";
Свойства
fd: number | undefined allowHalfOpen: boolean | undefined onread: OnReadOpts | undefined readable: boolean | undefined writable: boolean | undefined signal: AbortSignal интерфейс TcpNetConnectOpts
Использование в Deno
import { type TcpNetConnectOpts } from "node:net";
Свойства
timeout: number | undefined интерфейс TcpSocketConnectOpts
Использование в Deno
import { type TcpSocketConnectOpts } from "node:net";
Свойства
port: number host: string | undefined localAddress: string | undefined localPort: number | undefined hints: number | undefined family: number | undefined lookup: LookupFunction | undefined noDelay: boolean | undefined keepAlive: boolean | undefined keepAliveInitialDelay: number | undefined autoSelectFamily: boolean | undefined autoSelectFamilyAttemptTimeout: number | undefined интерфейс ConnectOpts
Использование в Deno
import { type ConnectOpts } from "node:net";
псевдоним типа IPVersion
Использование в Deno
import { type IPVersion } from "node:net";
Определение
"ipv4" | "ipv6" псевдоним типа LookupFunction
Использование в Deno
import { type LookupFunction } from "node:net";
Определение
(
hostname: string,
options: dns.LookupOptions,
callback: (
err: ErrnoException | null,
address: string | dns.LookupAddress[],
family?: number,
) => void,
) => void псевдоним типа NetConnectOpts
Использование в Deno
import { type NetConnectOpts } from "node:net";
Определение
псевдоним типа SocketConnectOpts
Использование в Deno
import { type SocketConnectOpts } from "node:net";
Определение
псевдоним типа SocketReadyState
Использование в Deno
import { type SocketReadyState } from "node:net";
Определение
"opening"
| "open"
| "readOnly"
| "writeOnly"
| "closed"
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/net