gpt4 book ai didi

events - NodeJS process.stdin `end` 事件中断 http.server 操作

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:42 25 4
gpt4 key购买 nike

我正在创建一个小程序,它读取 STDIN 并使用每个数据 block 递增一个字符串,如下所示:

var fullchunk;

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function (chunk) {

if (!fullchunk) {
fullchunk = "";
}

fullchunk += chunk;

});

process.stdin.once('end', function () {

process.stdin.removeAllListeners('data');
eval(fullchunk);

});

但不知何故,我似乎无法在这里使用 end 事件,因为当我通过 stdin 发送的文本类似于 http 服务器时,它将无法正常运行,但如果我只使用 onData 事件而不在 end 事件中声明任何内容,它就可以正常工作。

//STDIN content

require("http").createServer(function(request, response) {

response.writeHead(200);
response.end("Hello World");

}).listen(3000);

所以这绝对是我无法理解为什么 http 服务器操作会继续运行但它不响应我的请求的一件事,不确定这是否与主函数继承的变量范围有任何关系,或者 end 函数是否取消了所有其他请求。

任何帮助将不胜感激:)

最佳答案

显然,这个问题在使用 Node 0.4.0 时出现,并在升级到 0.4.3 后消失,幸运的是,http 服务器在触发 end 事件后可以正常运行。一件有趣的事情是将 vm module 替换为 eval(fullchunk) ,证明最好的实现和结果仅限于自己的沙箱:

require("vm").runInNewContext(fullchunk, {require: require});

希望这会有用

关于events - NodeJS process.stdin `end` 事件中断 http.server 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5404227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com