websocket 最大链接数量调试笔记

2018-12-15  本文已影响0人  马贞晓

在开发调试websocket的时候,去浏览器模拟了ws请求,测试服务器请求量,发现只有255个成功,之后所有请求全部失败,经各种考证发现,不是服务器问题,而是浏览器最大并发请求量为256。

测试请求代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>WEBSOCKET测试页面</title>
</head>
<body>
    <article id="info">

    </article>
</body>
<script>
  let tick = [];let errorNumber=0;tickNumber=200;
    let el = document.querySelector("#info");
    let state = []
    let store = {"message":"","db":[]};
        Object.defineProperty(store,"message",{ 
            set(value){
                store.db.push({
                    time:new Date(),message:value
                });
                 let txt 
                     txt+= store.db.map(d=>"<p>"+d.message+"</p>").join(" ");
                     el.innerHTML=txt;
            }
        })
    function ws(){
        const name="浔阳江头夜送客枫叶荻花秋瑟瑟主人下马客在船举酒欲饮无管弦醉不成欢惨将别别时茫茫江浸月忽闻水上琵琶声主人忘归客不发寻声暗问弹者谁琵琶声停欲语迟移船相近邀相见添酒回灯重开宴千呼万唤始出来犹抱琵琶半遮面转轴拨弦三两声未成曲调先有情弦弦掩抑声声思似诉平生不得志低眉信手续续弹说尽心中无限事轻拢慢捻抹复挑初为霓裳后六幺大弦嘈嘈如急雨小弦切切如私语嘈嘈切切错杂弹大珠小珠落玉盘间关莺语花底滑幽咽泉流冰下难冰泉冷涩弦凝绝凝绝不通声暂歇别有幽愁暗恨生此时无声胜有声银瓶乍破水浆迸铁骑突出刀枪鸣曲终收拨当心画四弦一声如裂帛东船西舫悄无言唯见江心秋月白"
        let n = name.substr(Math.floor(Math.random()*name.length),2);
        let id = this.v1(); tick.push(id);
        let num = Math.floor(Math.random()*tick.length);
        let toid = tick[num];
        let url = `ws://127.0.0.1:8000/?id=${id}&name=${n}&gid=00001`;
        let w = new WebSocket(url);
            debugger
        let th = this;
            w.addEventListener("message",function(d){
                
                store.message="收到消息<----"+d.data

            },false);
            w.addEventListener("open",function(d){
                w.send(`{"code":400,"data":"${n}:你好","toid":"${toid}","fromid":"${id}","publish":"0"}`)
                store.message="发送消息----->"+id+"-----"+toid;
                proxy.successNumber+=1;
            },false);
            w.addEventListener("close",function(e){
                store.message = id+"关闭";
                errorNumber+=1;
            },false);
            w.addEventListener("error",function(e){
                store.message=id+"报错"; console.log(e);
                proxy.errorNumber+=1;
            },false);
    }
    ws.prototype.v1=function(){
        return parseInt(Math.random()*0x10000).toString(16)+"-"+parseInt(Math.random()*0x10000).toString(16)+"-"+parseInt(Math.random()*0x10000).toString(16)+"-"+parseInt(Math.random()*0x10000).toString(16)
    }


    let els = document.createElement("div");
        Object.assign(els.style,{
            position:"fixed",
            top:0,
            right:0,
            ZIndex:100,
            fontSize:"20px",
            color:"#c00"
        })
        document.body.appendChild(els);
    let proxy = new Proxy({errorNumber:0,successNumber:0},{
        set(target,key,val){
            els.innerHTML = `成功${proxy.successNumber}-失败:${proxy.errorNumber}`
            return target[key]=val;
        }
    })
 
    for(var i=0,f=0;i<tickNumber;i++){
        setTimeout(function(){
            new ws();  
        })

    }
</script>
</html>

调试发现发起2000个请求后报错,提示并发量太大,于是翻阅nodejs 查看关于所有请求线程并发相关内容,发现http.request() 使用的默认 http.globalAgent 的选项均为各自的默认值

上一篇 下一篇

猜你喜欢

热点阅读