第一次尝试翻译文章,如果有翻译的不好或许有毛病的处所还望大佬们指导一二,感谢。
几分钟前我打开了一个 pull-request,它为 Nodejs Core 供应了初始的 HTTP/2 完成。虽然还不堪用,但对 Node.js 来说是一个主要的里程碑。
因为这只是一个pull-request,你要想和它兴奋的游玩的话须要做好下面这些准备工作。
起首你须要随着这个引见来设置好 Node.js 的构建环境。
然后切换到 initial-pr
分支:
$ git clone https://github.com/jasnell/node
$ git checkout initial-pr
然后最先构建:
$ ./configure
$ make -j8
构建须要小一会儿时刻,你能够先去觅个食守候构建终了。
构建完成以后,顺手几行代码就能够开一个 HTTP/2 的效劳了:
const http2 = require('http2');
const server = http2.createServer();
server.on('stream', (stream, requestHeaders) => {
stream.respond({ ':status': 200, 'content-type': 'text/plain' });
stream.write('hello ');
stream.end('world');
});
server.listen(8000);
因为如今这个 HTTP/2 还处在试验阶段,所以你在运转上面代码的时刻须要加上一个 --expose-http2
参数:
$ node --expose-http2 h2server.js
须要注重的是,上面启动的效劳是一个明文 TCP 衔接,而浏览器关于运用 HTTP/2 协定的要求是必需运用 TLS。然则我们能够开一个简朴的 HTTP/2 客户端来到达目标:
const http2 = require('http2');
const client = http2.connect('http://localhost:8000');
const req = client.request({ ':method': 'GET', ':path': '/' });
req.on('response', (responseHeaders) => {
// do something with the headers
});
req.on('data', (chunk) => {
// do something with the data
});
req.on('end', () => client.destroy());
设置好一个开启 TLS 的 HTTP/2 效劳只须要分外的几个步骤:
const http2 = require('http2');
const options = {
key: getKeySomehow(),
cert: getCertSomehow()
};
const server = http2.createSecureServer(options);
server.on('stream', (stream, requestHeaders) => {
stream.respond();
stream.end('secured hello world!');
});
server.listen(43);
你能够到 文档 中猎取更多有关 tls.createServer()
参数里的 key
和 cert
的运用说明。
只管如今另有许多的细节须要处置惩罚,另有许多的题目须要修复,然则这个最初的完成已供应了足够多的功用了,包含:
支撑推流(Push Stream)
respondWithFile() 和 respondWithFD() 能够高效的绕过 Stream API 发送原始文件数据
支撑 TLS 和 明文衔接
完整支撑多路复用的流(stream multiplexing)
支撑 HTTP/2 的优先级(Prioritization)和流量掌握(Flow Control)
支撑 HTTP/2 Trailer 头
支撑 HPACK 头紧缩
尽量靠近当前 HTTP/1 API 的 API 兼容层
开辟将会继续进行,比方安全性增强、机能优化和 API 优化。我们支付的越多,Node.js 就会变的越好。
祝人人复用兴奋。