'use strict';
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
(async () => {
await (new Promise((resolve, reject) => setTimeout(resolve, 10000)));
console.log('recv...');
req.setEncoding('utf8');
req.on('data', (chunk) => {
fs.writeFileSync('test.txt', chunk, { flag: 'a' });
});
req.on('end', () => {
res.end();
});
})();
}).listen(23380, '0.0.0.0');
当未设置“on data”事件监听器时,nodejs http 模块(或一般的 http 协议(protocol))会做什么?
Throw packages away(会不会丢失包裹)?
或者将包存储在内存中(它会吃掉我所有的内存吗)?
或者告诉客户“嘿,我不想要你的包裹。稍后再寄给我”?
它是如何工作的?
如果您能提供一些引用资料(源代码或文档),我将不胜感激。
最佳答案
http.createServer
实际上提供的是一个 EventEmitter Source .因此,您的问题可以简化为询问未收听的事件会发生什么。
对于一个事件,无论谁监听了那个特定事件,如果满足它发生的条件,它就会发生。因此,如果 "data" 事件是由 http.createServer 提供的 EventEmitter 发出的,您无法通过不监听它来停止它。你实际上在做的只是忽略它。
当您收听 data 对象时,您实际上是在使用 req.on 行动。因此,如果您还没有订阅该事件,它就不会发送给您,仅此而已。它将如何影响代码取决于代码是否可以在没有事件的情况下完成。
关于node.js - 当没有设置 "on data"事件监听器时,nodejs http模块会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54360263/