node.js - 当没有设置 "on data"事件监听器时,nodejs http模块会做什么?

标签 node.js http tcp

'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/

相关文章:

c++ - NtDeviceIoControlFile(查询 IP 地址条目)- STATUS_INVALID_DEVICE_REQUEST

c - TCP 非阻塞连接失败,getsockopt OptValue 113 请建议

node.js - Redis hash值不能按时间顺序显示

ios - 无论如何,有没有办法从 Swift 中的 socket.io 方法返回一些东西?

c - 解析 HTTP header 的子集以识别主机 Web 地址

android - 使用 Retrofit2 的补丁请求无法在 Android 上运行

scala - Akka 使用同一个端口创建两个 Tcp 连接

javascript - 使用 gulp 生成文件

javascript - 如何使用 Node JS 获取排序的文件路径列表

c# - 如何正确重试 HttpRequestMessage?