美文网首页
websocket 最大链接数量调试笔记

websocket 最大链接数量调试笔记

作者: 马贞晓 | 来源:发表于2018-12-15 13:44 被阅读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 的选项均为各自的默认值

  • keepAlive <boolean>: 保持 socket 可用即使没有请求,以便它们可被将来的请求使用而无需重新建立一个 TCP 连接。默认为 false。
  • keepAliveMsecs <number> :当使用了 keepAlive 选项时,该选项指定 TCP Keep-Alive 数据包的 初始延迟。 当 keepAlive 选项为 false 或 undefined 时,该选项无效。 默认为 1000。
  • maxSockets <number> 每个主机允许的最大 socket 数量。 默认为 Infinity。
  • maxFreeSockets <number> 在空闲状态下允许打开的最大 socket 数量。 仅当 keepAlive 为 true 时才有效。 默认为 256
    但是并没有为koa开启keepAlive 所以不会是原始globalAgent 的问题,使用多浏览器请求,每次200个是可以的,服务端线程池也没有报错,所以判断是浏览器限制每次并发请求不能大于256个线程。

相关文章

  • websocket 最大链接数量调试笔记

    在开发调试websocket的时候,去浏览器模拟了ws请求,测试服务器请求量,发现只有255个成功,之后所有请求全...

  • WebSocket 笔记

    WebSocket 笔记 WebSocket 握手客户端请求 Sec-WebSocket-Key: dGhlIHN...

  • Python WebSocket Client

    当WebSocket服务搭好之后,如何用Python调试呢? Python的WebSocket客户端有很多,这里推...

  • WebSocket连接不上wss?Websocket 链接wss

    WebSocket连接不上wss?Websocket 链接wss报secure WebSockets not im...

  • 2021-06-10

    今日收获完成websocket集群双向推送调试 完成动画测试

  • WebSocket(长链接)

    一、WebSocket 定义 WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。 但它...

  • WebSocket 长链接

    最近公司要做一款内部使用的工具类app,方便销售部门打电话(其实就是在后台有好多用户数据,之前销售部门同事拨打电话...

  • websocket 调试工具

    在线调试工具:http://www.websocket-test.com/[http://www.websocke...

  • Android WebSocket加密

    前提:本文基于Java-WebSocket-1.3.4.jar 需求:公司App中有个WebSocket长链接需要...

  • WebSocket 协议 1~4 节

    WebSocket 协议 此文仅作为 RFC6455 的学习笔记。篇幅太长超过了简书的单篇最大长度,故分为两篇,此...

网友评论

      本文标题:websocket 最大链接数量调试笔记

      本文链接:https://www.haomeiwen.com/subject/xmaohqtx.html