叁拾贰- NodeJS简单代理池(有完没完?) 之 SuperAgent 使用代理不是 Timeout 的 Timeout

1。绝望

当我以为上篇已经完了的时候,跟女朋友在全城封闭期间偷偷冒险外出吃个麦当劳回来后发现,还是一样 TCP 数慢增:
此处应该是绝望的表情
前文链接:
叁拾壹- NodeJS简单代理池(合) 之 MongoDB 链接数爆炸了

2。排查

直接上服务器看到底是什么连的那么多个 TCP连接,不看不知道,一看吓一跳:

[Berry@tencentcloud ~]$ netstat -tnlpoa|grep 9999|wc -l
399
[Berry@tencentcloud ~]$ netstat -tnlpoa|grep 27017|wc -l
137

我咧个去…为什么9999端口会比27017端口多那么多 TCP 连接数
细致看一下:

tcp        0      0 172.17.0.7:33426        163.204.244.111:9999    ESTABLISHED 2480/node /home/Ber  off (0.00/0/0)
tcp        0      1 172.17.0.7:48676        216.140.201.110:9999    SYN_SENT    2480/node /home/Ber  on (1.49/4/0)
tcp        0      1 172.17.0.7:47066        58.253.156.17:9999      SYN_SENT    2480/node /home/Ber  on (13.57/5/0)
tcp        0     78 172.17.0.7:44104        112.111.217.217:9999    ESTABLISHED 2480/node /home/Ber  on (65.50/15/0)
tcp        0      0 172.17.0.7:33446        182.35.85.137:9999      ESTABLISHED 2480/node /home/Ber  off (0.00/0/0)

好吧,我承认我不懂什么意思,于是搜索引擎了一下:
linux下netstat --timers / -o详解及keepalive相关
我崩溃了,有些连接连了整整5、6分钟都还在连。
但是我代码明明写了 Timeout 是那十几秒的呀!

3。代码

        let funGoRandSpy = (strRandProxy, funCB) => {
            // 上网看到很多高匿的代理都是9999端口的,就尝试一下随机测试网上所有9999端口呗
            // 排查端口指令 sudo netstat -tnlpoa|grep 9999|wc -l
            let strProxy = 'http://' + strRandProxy + ':9999';
            // console.log('  testing :' + strProxy);
            // 其中 intTimeout 为 3000 ms
            request.get('https://www.baidu.com').timeout({ response: that.intTimeout, deadline: that.intTimeout * 3 }).use(superagentCheerio).proxy(strProxy).set(that.objHeader).then((res) => {
                let objProxyForSave = { u: strRandProxy, p: '9999' };
                objCTLSave.saveOneProxy(objProxyForSave, () => {});
                console.log('  ' + strProxy + '  测试居然通过!');
                funCB(null, true);
            }).catch((err) => {
                funCB(null, true);
            });
        };

为什么已经反馈了超时,你还一直在等!?我的心在等待,永远在等待?
我上网找了很久,也找了 SuperAgent 官网,没说这是为啥啊,那这是为啥!?

4。暂时解决

暂时的解决方案是,既然它连接最大是10分钟的,我决定把这个永续循环放到10分钟之后再执行,那该可以了吧?
明天睡醒之后再看结果。

我估计可以解决。

5。有没有人知道为什么啊!!

有没有大神请告诉我怎么破?
我感觉,需要从 服务器上面下手(我的是 Centos 7)。 SuperAgent 官网上也没有类似的解答,我绝望了。
好了,明天上班,晚安。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值