Node.js Core 如何实现 HTTP/2
沉沙 2018-06-06 来源 : 阅读 575 评论 0

摘要:本文讲解了 Node.js Core 如何实现 HTTP/2,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

 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('//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 的使用说明。

尽管现在还有很多的细节需要处理,还有很多的问题需要修复,但是这个最初的实现已经提供了足够多的功能了,包括:

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 就会变的越好。

 

本文由职坐标整理并发布,了解更多内容,请关注职坐标WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程