事件:'stream'
【Event: 'stream'】
stream<Http2Stream> 对流的引用headersHTTP/2 头对象 一个描述头信息的对象flags<number> 相关的数字标志rawHeadersHTTP/2 原始头 一个包含原始头的数组
当创建新的 Http2Stream 时,会触发 'stream' 事件。
【The 'stream' event is emitted when a new Http2Stream is created.】
session.on('stream', (stream, headers, flags) => {
const method = headers[':method'];
const path = headers[':path'];
// ...
stream.respond({
':status': 200,
'content-type': 'text/plain; charset=utf-8',
});
stream.write('hello ');
stream.end('world');
}); 在服务器端,用户代码通常不会直接监听此事件,而是会为 http2.createServer() 和 http2.createSecureServer() 返回的 net.Server 或 tls.Server 实例发出的 'stream' 事件注册一个处理程序,如下面的示例所示:
【On the server side, user code will typically not listen for this event directly,
and would instead register a handler for the 'stream' event emitted by the
net.Server or tls.Server instances returned by http2.createServer() and
http2.createSecureServer(), respectively, as in the example below:】
import { createServer } from 'node:http2';
// Create an unencrypted HTTP/2 server
const server = createServer();
server.on('stream', (stream, headers) => {
stream.respond({
'content-type': 'text/html; charset=utf-8',
':status': 200,
});
stream.on('error', (error) => console.error(error));
stream.end('<h1>Hello World</h1>');
});
server.listen(8000);const http2 = require('node:http2');
// Create an unencrypted HTTP/2 server
const server = http2.createServer();
server.on('stream', (stream, headers) => {
stream.respond({
'content-type': 'text/html; charset=utf-8',
':status': 200,
});
stream.on('error', (error) => console.error(error));
stream.end('<h1>Hello World</h1>');
});
server.listen(8000);尽管 HTTP/2 流和网络套接字不是一一对应的,网络错误会破坏每个单独的流,并且必须在流级别处理,如上所示。
【Even though HTTP/2 streams and network sockets are not in a 1:1 correspondence, a network error will destroy each individual stream and must be handled on the stream level, as shown above.】