gpt4 book ai didi

javascript - NodeJS 服务器无法处理多个用户

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:38 24 4
gpt4 key购买 nike

我有一个在 Heroku(免费版)上运行的 NodeJS 服务器。服务器接受来自客户端的 HTTP POST(传递参数)并在 headless 浏览器中执行 Web 请求(使用参数)。 headless 浏览器称为 HorsemanJS . “Horseman 是一个 Node.js 模块,它使使用 PhantomJS 成为一种乐趣。它具有直接可链接的 API、易于理解的控制流、对多个选项卡的支持以及内置的 jQuery。”

当我从客户端(我的计算机)向服务器发送请求(实际上是 for 循环 20 个请求)时,服务器代码正常工作(执行 20 个 HorsemanJS 网络请求),并返回预期值。然后,它等待下一个连接。这一切都很好。

问题是,当我尝试同时使用两个不同的客户端(我的电脑和手机)连接到服务器时,它崩溃了。我可以重新启动服务器并返回到成功使用一个客户端。我怎样才能让它处理多个客户?

崩溃时出错:

child_process.js:788
child.stdout.addListener('data', function(chunk) {
^
TypeError: Cannot read property 'addListener' of undefined
at Object.exports.execFile (child_process.js:788:15)
at exports.exec (child_process.js:649:18)
at Socket.<anonymous> (/app/node_modules/node-horseman/node_modules/node-phantom-simple/node-phantom-simple.js:237:7)
at Socket.g (events.js:199:16)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at Pipe.onread (net.js:538:20)

从我的服务器代码中提取:

var express = require('express');
var app = express();
var Horseman = require('node-horseman');

app.set('port', (process.env.PORT || 5000));

var printMessage = function() { console.log("Node app running on " + app.get('port')); };

var getAbc = function(response, input)
{
var horseman = new Horseman();

horseman
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0") // building web browser
.open('http://www.stackoverflow.com')
.html()
.then(function (result) {
var toReturn = ijk(result));

response.writeHead(200, {'Content-Type': 'text/plain'});
response.end(toReturn);
}).close();
}

var handleXyz = function(request, response)
{
getAbc(response, request.query.input);
}

app.listen(app.get('port'), printMessage);
app.post('/xyz', handleXyz);

我尝试将 .close 移动到 .then 中,也在 .then 之前移动。该代码仍然适用于单个客户端,但不适用于多个客户端。

我怀疑问题是一个客户端在客户端尝试使用它时/之前关闭了 PhantomJS 实例。

最佳答案

将 horseman.close() 放在 finally 中可能无法给它足够的时间来完全关闭我们的 phantomJS 进程。尝试将 finally 更改为 .then(),然后返回 horseman.close()。

关于javascript - NodeJS 服务器无法处理多个用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306822/

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