запрос axios на флеш-сервер, не использующий одно и то же TCP-соединение / порт даже с keepalive - PullRequest
0 голосов
/ 10 июля 2019

Моя цель - иметь возможность использовать одно и то же базовое TCP-соединение (т. Е. HTTP keep-alive) для запросов POST, отправляемых клиентом axios Node.js на сервер Flask.Поэтому номер порта каждого запроса, поступающего на сервер Flask, должен каждый раз совпадать.

Ниже приведен код, используемый для возможности репликации этой проблемы.Я использую на компьютере с Ubuntu 16.04 Python 2.7 с Flask 1.1.1 и Node.js 10.12.0 с axios 0.19.0.

Сервер Python (с использованием Flask):

from flask import Flask, request
app = Flask(__name__)

@app.route("/", methods = ["POST"])
def hello_world():
    print request.environ["HTTP_CONNECTION"]
    print request.environ["REMOTE_PORT"]
    return 'pong'

app.run(host = "127.0.0.1", port = 5000)

Клиент Node.js (с использованием axios):

const agentkeepalive = require("agentkeepalive");
const agent = new agentkeepalive({maxSockets: 1, keepAliveMsecs: 3000, freeSocketTimeout: 3000, timeout: 3000, freeSocketTimeout: 3000, maxFreeSockets: 3000});
const axios = require("axios").create({httpAgent: agent});

for (let i = 0; i < 10; i++)
{
    axios.post("http://127.0.0.1:5000", "ping");
}

При запуске сервера, сопровождаемого клиентом, я получаю от сервера вывод:

keep-alive
44782
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44784
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44786
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44788
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44790
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44792
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44794
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44796
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44798
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -
keep-alive
44800
127.0.0.1 - - [10/Jul/2019 16:09:09] "POST / HTTP/1.1" 200 -

Как видно извывод выше, заголовок keep-alive отправляется серверу Flask, поэтому базовое TCP-соединение не должно быть закрыто.Однако клиент, похоже, каждый раз отправляет свое сообщение ping с другого порта, несмотря на все настройки, которые я использую, чтобы убедиться, что базовое TCP-соединение остается активным.

...