Я изучал заголовки поддержки активности в 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
Метод Nodejs http.request () вызывает некоторое непреднамеренное поведение для подключений ⇐ Javascript
Форум по Javascript
1737870440
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();
Подробнее здесь: [url]https://stackoverflow.com/questions/79388015/nodejs-http-request-method-is-causing-some-unintended-behaviour-for-keep-alive[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия