客户端和服务端都是 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)
})
})
在本地跑看不出问题,毕竟本地通信带宽极大,放到服务器上就有问题了。不知是踩到哪个坑了。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.