[譯]當 Node.js Core 遇到 HTTP/2

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

第一次嘗試翻譯文章,若是有翻譯的很差或者有錯誤的地方還望大佬們指點一二,謝謝。html

幾分鐘前我打開了一個 pull-request,它爲 Nodejs Core 提供了初始的 HTTP/2 實現。雖然還不堪用,但對 Node.js 來講是一個重要的里程碑。 java

由於這只是一個pull-request,你要想和它愉快的玩耍的話須要作好下面這些準備工做。node

首先你須要跟着這個介紹來配置好 Node.js 的構建環境。git

而後切換到 initial-pr 分支:github

$ git clone https://github.com/jasnell/node
$ git checkout initial-pr

而後開始構建:api

$ ./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 就會變的越好。

祝你們複用愉快。

相關文章
相關標籤/搜索