Метод Nodejs http.request () вызывает некоторое непреднамеренное поведение для подключенийJavascript

Форум по Javascript
Ответить
Anonymous
 Метод Nodejs http.request () вызывает некоторое непреднамеренное поведение для подключений

Сообщение Anonymous »

Я изучал заголовки поддержки активности в http. Я решил проверить это сам. Поэтому я создал клиент nodejs, используя агент http и метод http.request() в nodejs, и файл server.js, используя только nodejs. Но у меня возникла проблема: когда я делаю http-запрос на свой сервер с помощью файла client.js, событие socket.on('close') запускается немедленно в файле server.js, даже если у него есть "keepAliveTimeout = 5000" Но если я сделаю запрос с помощью почтальона (с заголовком Connection:keep-alive или без него), событие socket.on('close') запустится через 5 секунд. Это вызывает у меня большую головную боль.Файл Server.js:
const port=process.env.PORT || 5000;
const server=http.createServer((req,res)=>{
if(req.method==='GET'&&req.url==='/'){
req.on('close',()=>{
console.log('request closed')
})
console.log('get request arrived');
console.log(req.headers);
console.log(req.socket.timeout);
res.writeHead(200,{
'Content-Type':'text/plain',
'Connection':'keep-alive',
});
res.on('finish', () => {
console.log('Response finished. Checking socket state...');
console.log('Socket writable:', req.socket.writable);
});

res.end('hello world');

setTimeout(()=>{console.log('i am timeout')},5000);
//when socket closes console.log
req.socket.on('close',()=>{
console.log('socket is closed');
});

req.socket.on('end', () => console.log('Socket ended'));

req.socket.on('timeout', () => console.log('Socket timeout'));
}
});
server.listen(port,()=>{
console.log('server is listening in port:',port);
});
server.keepAliveTimeout = 5000; // Keep socket alive for 5 seconds after response
server.headersTimeout = 60000;
console.log('timeout',server.keepAliveTimeout)

и файл Client.js:

const agent = new http.Agent({
keepAlive: true,
maxSockets: 5, // Limit concurrent sockets
maxFreeSockets: 1, // Allow only 1 free socket
keepAliveMsecs: 5000,
timeout: 5000, // Timeout for inactive sockets
});

const options = {
agent: agent,
hostname: 'localhost', // Use only hostname, not "http://"
port: 5000,
method: 'GET',
path: '/',
headers: {
'Accept': '*/*',
'Connection':'keep-alive' ,
'Keep-Alive':'timeout=5'
// Basic headers
},
};

const request = http.request(options, (response) => {
console.log('Response Status:', response.statusCode);
console.log('Response Headers:', response.headers);

response.on('data', (chunk) => {
console.log('Response Body:', chunk.toString('utf-8'));
});

response.on('end', () => {
console.log('No more data in response.');
});
});

request.on('error', (error) => {
console.error('Request error:', error);
});

request.end();


Подробнее здесь: https://stackoverflow.com/questions/793 ... keep-alive
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»