js 多个websocket 连接实质是异步连接处理

未结帖
0 708
ajian admin_jim 2017-12-22
悬赏:5飞吻
<script language="javascript">


    function connectSocketServer() {

    }
    connectSocketServer.prototype = {
        heartBeatIntervalCode: null,
        autoConnectIntervalCode: null,
        navigator: null,
        dropalert:null,
        connectState:false,
        getSpeed:function(){
            try {
                this.connectState=false;
                
                this.getServerDelay('123.56.160.221:8889');
                this.getServerDelay('123.56.160.221:8890');
                this.getServerDelay('192.168.1.9:2012');
                this.getServerDelay('39.106.111.41:8889');
                this.getServerDelay('39.106.111.41:8890');
            }
            catch (ex){

            }
        },
        getServerDelay:function(data){
            try {
                let socket=new WebSocket('ws://'+data);
                socket.onopen=(()=>{
                    if(!this.connectState){
                        this.connectState=true;
                        alert(data);
                    }
                    socket.close();
                });
            }
            catch (ex){
            }
        }
    }
    var connectSocketServerNew = new connectSocketServer();
    connectSocketServerNew.getSpeed();
    
</script>

如上代码getSpeed()中有5个this.getServerDelay()同步执行, 但是 这5个this.getServerDelay()中发起的5次websocket连接是异步执行,所以并非是第一个websocket服务器响应完成后才执行下一个websocket连接。可以理解成这5个连接是同时发起的,最快的服务器最先给客户端响应,从而最先改变this.connectState的状态,等其他较慢的服务器响应后对应的客户端的this.connectState已经被改变了,所以客户端剩下的几个请求在被响应后执行了与最快获得响应的那一次不一样的代码逻辑,即最快的那一次(不一定是第一次)执行了if(!this.connectState){ ...... } 判断里面的代码,而剩下的4次则未执行

热忱回答0


最近热帖

近期热议

  1. javascript——prototype与__proto 9
  2. Mysql 中出现的Data truncated for column 3
  3. 在nginx中使用x-sendfile的解决方案 3
  4. 高版本jQuery面插件实现Ajax上传图片 1
  5. Thinkphp Socket.class.php 类的使用 1
  6. 使用ionic3创建第一个App 0
  7. ios-oc html5 0
  8. nginx.conf 0
  9. 基于ionic3.4.0的项目搭建 0
  10. php 缩略图 0