Быстрый сервер Node.js возвращает ошибку сокета, ищет правильные параметры

Я пытаюсь использовать сервер для quic, используя версию узла v8.4.0: git clone https://github.com/toajs/quic.git

Там нет примера или описания, как использовать код. Вот мой код, сохраненный в "test.js", чтобы попытаться вызвать сервер:

// server
var s = require('./server');
var t = new s.Server();

t.listen(3000, 'localhost');

Вот результат попытки выполнения:

$ node test.js (узел:14446) UnhandledPromiseRejectionWarning: необработанное отклонение обещания (идентификатор отклонения: 1): ошибка [ERR_SOCKET_BAD_TYPE]: указан неверный тип сокета. Допустимые типы: udp4, udp6 (узел:14446) [DEP0018] DeprecationWarning: Необработанные отклонения обещаний не рекомендуются. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.

Вот файл server.js, который я пытаюсь использовать (из репозитория git):

'use strict'
// **Github:** https://github.com/toajs/quic
//
// **License:** MIT

const { createSocket } = require('dgram')
const EventEmitter = require('events')
const { lookup } = require('./common')

// Event: 'listening'
// Event: 'connection'

class Server extends EventEmitter {
  constructor () {
    super()
    this._udp = null
    this.localFamily = ''
    this.localAddress = ''
    this.localPort = 0
    this.listening = false
    this.conns = new Map()
  }

  address () {
    return {port: this.localPort, family: this.localFamily, address: this.localAddress}
  }

  async listen (port, address) {
    if (this._udp) throw new Error('Server listening')

    let type = 'upd4'
    if (address) {
      let addr = await lookup(address || 'localhost')
      if (addr.family === 6) type = 'upd6'
    }

    this._udp = createSocket(type)
    this._udp
      .on('error', (err) => this.emit('error', err))
      .on('close', () => this._onclose())
      .on('message', (msg, rinfo) => this._onmessage(msg, rinfo))

    let res = new Promise((resolve, reject) => {
      this._udp.once('listening', () => {
        this._udp.removeListener('error', reject)

        let addr = this._udp.address()
        this.localFamily = addr.family
        this.localAddress = addr.address
        this.localPort = addr.port
        this.emit('listening')
        resolve()
      })
      this._udp.once('error', reject)
    })
    // Can't support cluster
    this._udp.bind({port: port, address: address, exclusive: true})
    return res
  }

  _onmessage (msg, rinfo) {}
  _onclose () {}

  close () {}
  getConnections () {
    return Promise.resolve(this.conns.size)
  }
  ref () {}
  unref () {}
}

exports.Server = Server

Ясно, что я должен установить семейство сокетов конструктора, такое как udp4 и, возможно, другие параметры, но я не уверен, как это сделать с помощью конструктора сервера. Я читал о конструкторах Node.js, но до сих пор не определил правильный подход. Учебники по использованию сокетов в Node.js не переносятся на этот тип кода. Если кто-нибудь может указать мне правильное направление, либо для передачи параметров, либо для учебника по быстрому серверу, я бы очень признателен.

0 ответов

Другие вопросы по тегам