NodeJS 中 HTTP2 的一个诡异问题

查看 25|回复 0
作者:iqoo   
客户端和服务端都是 HTTP2 。
用 curl 从服务端下载数据可跑满服务器带宽(约 4MB/s ),用 NodeJS 的客户端下载只能跑到 1MB/s ,说明服务端没问题,可能是客户端的问题。
但奇怪的是,把客户端的测试 URL 换成网上某个 CDN 大文件时,也能达到很高的下载速度,这样看客户端也没问题。
这里附上精简后的代码。服务端:
import fs from 'fs'
import http2 from 'http2'
const h2Server = http2.createSecureServer({
  key: fs.readFileSync('ecc.key'),
  cert: fs.readFileSync('ecc.cer')
})
h2Server.on('stream', (stream) => {
  stream.on('error', () => {})
  stream.respond()
  const buf = Buffer.alloc(65536)
  const next = () => {
    stream.write(buf, err => {
      if (err) {
        stream.end()
      } else {
        next()
      }
    })
  }
  next()
}).listen(443)
客户端:
import http2 from 'http2'
const url = new URL('https://........')
const h2session = http2.connect(url, () => {
  const stream = h2session.request({
    ':path': url.pathname,
    ':authority': url.host,
  })
  stream.on('response', () => {
    let bps = 0
    stream.on('data', chunk => {
      bps += chunk.length
    })
    setInterval(() => {
      console.log('speed:', bps)
      bps = 0
    }, 1000)
  })
})
在本地跑看不出问题,毕竟本地通信带宽极大,放到服务器上就有问题了。不知是踩到哪个坑了。。。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部