我正在尝试使用节点版本 v8.4.0 使用服务器进行 quic: 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 (node:14446) UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):错误 [ERR_SOCKET_BAD_TYPE]:指定了错误的套接字类型。有效类型为:udp4、udp6(节点:14446)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
这是我尝试使用的 server.js 文件(来自 git repo):
'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 和可能的其他参数,但我不确定如何使用 Server 构造函数来执行此操作。我一直在阅读有关 Node.js 构造函数的信息,但到目前为止还没有确定正确的方法。Node.js 中的套接字使用教程不会转移到这种类型的代码。如果有人能指出我正确的方向,无论是参数传递,还是快速服务器教程,我都会非常感激。