[译]当 Node.js Core 碰到 HTTP/2

原文:Say hello to HTTP/2 for Node.js Core

第一次尝试翻译文章,如果有翻译的不好或许有毛病的处所还望大佬们指导一二,感谢。

几分钟前我打开了一个 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() 参数里的 keycert 的运用说明。

只管如今另有许多的细节须要处置惩罚,另有许多的题目须要修复,然则这个最初的完成已供应了足够多的功用了,包含:

  1. 支撑推流(Push Stream)

  2. respondWithFile() 和 respondWithFD() 能够高效的绕过 Stream API 发送原始文件数据

  3. 支撑 TLS 和 明文衔接

  4. 完整支撑多路复用的流(stream multiplexing)

  5. 支撑 HTTP/2 的优先级(Prioritization)和流量掌握(Flow Control)

  6. 支撑 HTTP/2 Trailer 头

  7. 支撑 HPACK 头紧缩

  8. 尽量靠近当前 HTTP/1 API 的 API 兼容层

开辟将会继续进行,比方安全性增强、机能优化和 API 优化。我们支付的越多,Node.js 就会变的越好。

祝人人复用兴奋。

    原文作者:gongpeione
    原文地址: https://segmentfault.com/a/1190000010288081
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞