Spec-Zone.ru › Deno 2

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
addRange(
start: string,
end: string,
type?: IPVersion,
): void

Добавляет правило для блокировки диапазона IP-адресов от start (включительно) доend (включительно).

addRange(
start: SocketAddress,
end: SocketAddress,
): void
addSubnet(
net: SocketAddress,
prefix: number,
): void

Добавляет правило для блокировки диапазона IP-адресов, заданного маской подсети.

addSubnet(
net: string,
prefix: number,
type?: IPVersion,
): void
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
check(
address: string,
type?: IPVersion,
): boolean

Статические методы

isBlockList(value: unknown): value is BlockList

Возвращает true, если value является net.BlockList.


class Server

extends EventEmitter

Использование в Deno

import { Server } from "node:net";

Этот класс используется для создания сервера TCP или IPC.

Конструкторы

Server(connectionListener?: (socket: Socket) => void)
new
Server(
options?: ServerOpts,
connectionListener?: (socket: Socket) => void,
)
new

Свойства

connections: number
listening: boolean
readonly

Показывает, прослушивает ли сервер соединения.

maxConnections: number

Задайте это свойство, чтобы отклонять соединения, когда их число на сервере становится слишком большим.

Не рекомендуется использовать этот параметр после передачи сокета дочернему процессу с помощью child_process.fork().

Методы

[Symbol.asyncDispose](): Promise<void>

Вызывает Server.close() и возвращает промис, который выполняется после закрытия сервера.

addListener(
event: string,
listener: (...args: any[]) => void,
): this

events.EventEmitter

  1. close
  2. connection
  3. error
  4. listening
  5. 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():
AddressInfo
| string
| null

Возвращает привязанный 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: "connection",
socket: Socket,
): 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: "connection",
listener: (socket: Socket) => 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: "connection",
listener: (socket: Socket) => 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

наследует stream.Duplex

Использование в Deno

import { Socket } from "node:net";
Совместимость с Deno

Параметр 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

  1. close
  2. connect
  3. connectionAttempt
  4. connectionAttemptFailed
  5. connectionAttemptTimeout
  6. data
  7. drain
  8. end
  9. error
  10. lookup
  11. ready
  12. 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=1
  • TCP_KEEPIDLE=initialDelay
  • TCP_KEEPCNT=10
  • TCP_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)
новый

Свойства

address: string
только для чтения

Либо `'ipv4'`, либо `'ipv6'`.

family: IPVersion
только для чтения

Либо `'ipv4'`, либо `'ipv6'`.

flowlabel: number
только для чтения
port: number
только для чтения

Статические методы

parse(input: string): SocketAddress | undefined

функция connect

Использование в Deno

import { connect } from "node:net";

Перегрузка 1

connect(
options: NetConnectOpts,
connectionListener?: () => void,
): Socket

Является псевдонимом для createConnection.

Возможные сигнатуры:

  • connect
  • connect для соединений IPC.
  • connect для TCP-соединений.

Параметры

options: NetConnectOpts
connectionListener: () => void
необязательный

Возвращаемый тип

Socket

Перегрузка 2

connect(
port: number,
host?: string,
connectionListener?: () => void,
): Socket

Параметры

port: number
host: string
необязательный
connectionListener: () => void
необязательный

Возвращаемый тип

Socket

Перегрузка 3

connect(
path: string,
connectionListener?: () => void,
): Socket

Параметры

path: string
connectionListener: () => void
необязательный

Возвращаемый тип

Socket

функция 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
необязательный

Возвращаемый тип

Socket

Перегрузка 2

createConnection(
port: number,
host?: string,
connectionListener?: () => void,
): Socket

Параметры

port: number
host: string
необязательный
connectionListener: () => void
необязательный

Возвращаемый тип

Socket

Перегрузка 3

createConnection(
path: string,
connectionListener?: () => void,
): Socket

Параметры

path: string
connectionListener: () => void
необязательный

Возвращаемый тип

Socket

функция 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'.

Возвращаемый тип

Server

Перегрузка 2

createServer(
options?: ServerOpts,
connectionListener?: (socket: Socket) => void,
): Server

Параметры

options: ServerOpts
необязательный
connectionListener: (socket: Socket) => void
необязательный

Возвращаемый тип

Server

функция 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";

Свойства

address: string
family: string
port: number

интерфейс DropArgument

Использование в Deno

import { type DropArgument } from "node:net";

Свойства

localAddress: string
необязательный
localPort: number
необязательный
localFamily: string
необязательный
remoteAddress: string
необязательный
remotePort: number
необязательный
remoteFamily: string
необязательный

интерфейс IpcNetConnectOpts

расширяет IpcSocketConnectOptsSocketConstructorOpts

Использование в Deno

import { type IpcNetConnectOpts } from "node:net";

Свойства

timeout: number | undefined
необязательный

интерфейс IpcSocketConnectOpts

Использование в Deno

import { type IpcSocketConnectOpts } from "node:net";

Свойства

path: string

интерфейс ListenOptions

наследует Abortable

Использование в 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: BlockList | undefined
необязательное

blockList можно использовать для блокировки входящего доступа с определенных IP-адресов, диапазонов IP-адресов или подсетей IP. Это не работает, если сервер находится за обратным прокси-сервером, NAT и т. д., поскольку с адресом в списке блокировки сравнивается адрес прокси-сервера или адрес, указанный NAT.


интерфейс SocketAddressInitOptions

Использование в Deno

import { type SocketAddressInitOptions } from "node:net";

Свойства

address: string | undefined
необязательное

Сетевой адрес в виде строки IPv4 или IPv6.

family: IPVersion | undefined
необязательное
flowlabel: number | undefined
необязательное

Метка потока IPv6, используемая только если family равно 'ipv6'.

port: number | undefined
необязательное

IP-порт.


интерфейс 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

наследует TcpSocketConnectOptsSocketConstructorOpts

Использование в 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
необязательное
blockList: BlockList | 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";

Определение

TcpNetConnectOpts | IpcNetConnectOpts

псевдоним типа SocketConnectOpts

Использование в Deno

import { type SocketConnectOpts } from "node:net";

Определение

TcpSocketConnectOpts | IpcSocketConnectOpts

псевдоним типа 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API