Сценарий
My Perl обращается к серверу Node.js и отправляет команды, которые сервер Node.js должен выполнить. Некоторые команды занимают меньше времени, другие - намного дольше. Пока команда выполняется на сервере, соединение молчит. Через некоторое время я получаю error: 500: Server closed connection without sending any data back
. Во время этой ошибки команда все еще выполняется на сервере, и желаемые результаты получены (если вы проверите журналы сервера). Моя проблема в том, что я не хочу, чтобы соединение сбрасывалось, поскольку есть другие команды, которые нужно запускать после этих длительных команд. Некоторые команды могут занять 20 минут.
Perl Боковой код:
my $ua = LWP::UserAgent->new;
$ua->timeout(12000);
my $uri = URI->new('http://server');
my $json = JSON->new;
my $data_to_json = {DATA};
my $json_content = $json->encode($data_to_json);
# set custom HTTP request header fields
my $req = HTTP::Request->new(POST => $uri);
my $resp = $ua->request($req);
my $message = $resp->decoded_content;
NodeJS Код
var express = require('express');
var http = require('http');
var app = express();
app.use(express.json());
var port = process.env.PORT || 8080;
app.get('<API URL>', function (req, res) {
<get all the passed arguments>
<send output to the console>
});
app.post('<API URL>', function(req, res) {
.
.
.
req.connection.setTimeout(0);
var exec = require('child_process').exec;
var child = exec(command);
}
// start the server
const server = app.listen(port);
server.timeout = 12000;
console.log('Server started! Listening on port' + port);
Я попытался добавить тайм-аут для сервера используя server.timeout
и req.connection.setTimeout(0);
.
Как убедиться, что соединение не разорвано?