簡體   English   中英

限制maxsockets請求包

[英]limit maxsockets request package

我嘗試限制請求包maxsockets,我使用fiddler測試它使用並發多少。

正如我所看到的,它不適用於我嘗試設置的10限制。

我不希望請求模塊使用超過10個並發

我可能做錯了什么?

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var loglar='idler2.txt';
var url = require('url');
var util = require('util');
var http = require('http');
var https = require('https');
var request = require('request');
var fs = require('fs');
var linkler = [];
var starttime = Math.round(new Date().getTime() / 1000);


http.globalAgent.maxSockets = 10;
https.globalAgent.maxSockets = 10;


var timeoutsure = 30 * 1000;
var success=0,fail=0;

process.on('exit', onExit);



function onExit() {
    console.log('\n%d secs,\n%d suc ,\n%d fail\n---------------------\n', 
    (Math.round(new Date().getTime() / 1000)) - starttime,success,fail);
}

function logla(data)
{
    var fd = fs.openSync(loglar, 'a+');
    fs.writeSync(fd, data);
    fs.closeSync(fd);
}

for(i=0;i<1000;i++)
{
    sorgutest();
}

var r = request.defaults({'proxy':'http://127.0.0.1:8888',pool: {maxSockets: 10}});

function sorgutest()
{

r.get({url:'https://freegeoip.net/json/',pool: {maxSockets: 10}}, function optionalCallback(err, httpResponse, body) {
  if (err) {
      fail++;
    return console.error('failed: 49', err);
  }
  else {
  try {bodyjson=JSON.parse(body);
  logla(body);
  success++;
  }
  catch(e){console.log("hamina 54");}
  }
});
}

fiddler nodejs test

如文檔中所述:

請注意,如果要在循環中發送多個請求並創建多個新池對象,則maxSockets將無法按預期工作。 要解決此問題,請將request.defaults與池選項一起使用,或者使用循環外部的maxSockets屬性創建池對象。

嘗試更改request.defaults的池選項或創建池對象並在所有請求調用上使用它。

編輯:

我注意到你已經使用了request.default,修復應該只是刪除r.get調用中的pool選項。

from: r.get({url:'https://freegeoip.net/json/',pool: {maxSockets: 10}}, function optionalCallback(err, httpResponse, body) {

to: r.get({url:'https://freegeoip.net/json/'}, function optionalCallback(err, httpResponse, body) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM