QUIC¶
Стабильность: 1 – Экспериментальная
1.0 — ранняя разработка. Возможность ещё не завершена и может существенно измениться. Эта возможность не подпадает под правила семантического версионирования.
Модуль node:quic реализует протокол QUIC. Чтобы им пользоваться, запустите Node.js с опцией --experimental-quic:
1 | |
1 | |
Модуль доступен только в схеме node:.
quic.connect(address[, options])¶
address| options- Возвращает:
промис с quic.QuicSession
Инициирует новую клиентскую сессию.
1 2 3 4 5 6 7 8 9 | |
По умолчанию каждый вызов connect(...) создаёт новый локальный экземпляр QuicEndpoint, привязанный к новому случайному локальному IP-порту. Чтобы задать точный локальный адрес или мультиплексировать несколько сессий QUIC через один локальный порт, передайте опцию endpoint со значением QuicEndpoint или EndpointOptions.
1 2 3 4 5 6 7 | |
quic.listen(onsession,[options])¶
onsession{quic.OnSessionCallback}options- Возвращает:
промис с quic.QuicEndpoint
Настраивает endpoint на прослушивание как сервер. Когда удалённый пир инициирует новую сессию, вызывается переданный callback onsession с созданной сессией.
1 2 3 4 5 6 7 8 9 10 11 | |
По умолчанию каждый вызов listen(...) создаёт новый локальный QuicEndpoint, привязанный к новому случайному локальному IP-порту. Чтобы задать точный локальный адрес или мультиплексировать несколько сессий QUIC через один локальный порт, передайте опцию endpoint со значением QuicEndpoint или EndpointOptions.
Один QuicEndpoint можно настроить на прослушивание как сервер не более одного раза.
Класс: QuicEndpoint¶
QuicEndpoint инкапсулирует локальную привязку UDP-порта для QUIC. Может использоваться и как клиент, и как сервер.
new QuicEndpoint([options])¶
endpoint.address¶
Локальный UDP-адрес сокета, к которому привязан endpoint, если есть.
Если endpoint сейчас не привязан, значение будет undefined. Только для чтения.
endpoint.busy¶
Если endpoint.busy равен true, endpoint временно отклоняет создание новых сессий. Чтение и запись.
1 2 3 4 5 | |
Свойство busy полезно при высокой нагрузке на endpoint, когда нужно временно отклонять новые сессии, пока он не разгрузится.
endpoint.close()¶
Корректно закрывает endpoint. Endpoint закроется и уничтожится, когда закроются все текущие сессии. После вызова новые сессии отклоняются.
Возвращает промис, выполняющийся после уничтожения endpoint.
endpoint.closed¶
Промис, выполняющийся после уничтожения endpoint. Это тот же промис, что возвращает endpoint.close(). Только для чтения.
endpoint.closing¶
true, если вызван endpoint.close() и закрытие endpoint ещё не завершилось. Только для чтения.
endpoint.destroy([error])¶
error{any}
Принудительно закрывает endpoint, немедленно закрывая все открытые сессии.
endpoint.destroyed¶
true, если вызван endpoint.destroy(). Только для чтения.
endpoint.setSNIContexts(entries[, options])¶
entries{object} Объект «имя хоста — параметры TLS-идентичности». В каждой записи должны бытьkeysиcerts.options{object}replaceЕсли true, заменяет всю карту SNI. Еслиfalse(по умолчанию), объединяет записи с существующей картой.
Заменяет или обновляет TLS-контексты SNI для этого endpoint. Позволяет менять TLS-идентичность (ключ/сертификат) для имён хостов без перезапуска endpoint. Существующие сессии не затрагиваются — обновлённые контексты используют только новые сессии.
1 2 3 4 5 6 7 8 | |
endpoint.stats¶
Статистика, собранная для активной сессии. Только для чтения.
endpoint[Symbol.asyncDispose]()¶
Вызывает endpoint.close() и возвращает промис, выполняющийся после закрытия endpoint.
Класс: QuicEndpoint.Stats¶
Представление собранной статистики для endpoint.
endpointStats.createdAt¶
endpointStats.destroyedAt¶
endpointStats.bytesReceived¶
endpointStats.bytesSent¶
endpointStats.packetsReceived¶
endpointStats.packetsSent¶
endpointStats.serverSessions¶
endpointStats.clientSessions¶
endpointStats.serverBusyCount¶
- Тип:
Сколько раз начальный пакет был отклонён из-за пометки endpoint как занятого. Только для чтения.
endpointStats.retryCount¶
endpointStats.versionNegotiationCount¶
endpointStats.statelessResetCount¶
endpointStats.immediateCloseCount¶
Класс: QuicSession¶
QuicSession представляет локальную сторону QUIC-соединения.
session.close()¶
Инициирует корректное закрытие сессии. Уже открытые потоки могут завершиться, новые не открываются. Когда все потоки закроются, сессия будет уничтожена. Промис выполнится после уничтожения сессии.
session.closed¶
Промис, выполняющийся после уничтожения сессии.
session.destroy([error])¶
error{any}
Немедленно уничтожает сессию. Все потоки уничтожаются, сессия закрывается.
session.destroyed¶
true, если вызван session.destroy(). Только для чтения.
session.endpoint¶
Endpoint, создавший эту сессию. Только для чтения.
session.onstream¶
- Тип: {quic.OnStreamCallback}
Вызывается при инициации нового потока удалённым пиром. Чтение и запись.
session.ondatagram¶
- Тип: {quic.OnDatagramCallback}
Вызывается при получении новой датаграммы от удалённого пира. Чтение и запись.
session.ondatagramstatus¶
- Тип: {quic.OnDatagramStatusCallback}
Вызывается при изменении статуса датаграммы. Чтение и запись.
session.onpathvalidation¶
- Тип: {quic.OnPathValidationCallback}
Вызывается при обновлении проверки пути. Чтение и запись.
session.onsessionticket¶
- Тип: {quic.OnSessionTicketCallback}
Вызывается при получении нового session ticket. Чтение и запись.
session.onversionnegotiation¶
- Тип: {quic.OnVersionNegotiationCallback}
Вызывается при начале согласования версии. Чтение и запись.
session.onhandshake¶
- Тип: {quic.OnHandshakeCallback}
Вызывается при завершении TLS-рукопожатия. Чтение и запись.