WebSoket的概述,API和使用
一、概念
      1 Web Socket(套接字)的目标时通过一个长时连接实现语服务器全双工,双向的通信
      2.在js中创建一个Web Socket时,会发送一个http请求到服务器以初始化连接。服务器响应之后,
        连接使用http的upgrade头部从http协议切换到web socket协议。这意味着web socket不能通过
         标准的http服务器实现,而必须使用支持该协议的专用服务器。
      3.因为web socket使用自定义的协议,所有url方案稍有变化:不能使用http://或https://,
       而要使用ws://和wss://。前者是不安全的连接,后者是安全连接。
      4.使用自定义协议而非http协议的好处是,客户端和服务器端之间可以发送非常少的数据,不会
      对http造成任何负担。使用更小的数据包让web socket非常适合带宽和延迟问题比较明显的移动
       应用。
      5.使用自定义协议的缺点是,定义协议的时间比定义js api要长
二、API
      1.创建一个新的Web Socket,就要实例化WebSocket对象并传入提供连接的url
	         let socket= new WebSocket('ws://www.example.com/server.php');
      2.readyState属性表示当前状态
	           WebSocket.OPENING:连接正在建立   ==》对应常量的值 0
	           WebSocket.OPEN:连接已经建立    ==》对应常量的值 1
	           WebSocket.ClOSING:连接正在关闭   ==》对应常量的值 2
	           WebSocket.ClOSE:连接已经关闭   ==》对应常量的值 3
	     3.WebSocket对象没有readystateChange事件,而是有与上述不同状态对应的其他事件
	      readyState值从0开始
	     4.任何时候都可以调用close()方法关闭 web socket连接,调用之后,readyState立即
	      变为2,并在关闭之后变为3
		
三、发送和接受数据
         1.使用send方法向服务器发送数据,可传入字符串,ArrayBuffer或Blob
let socket= new WebSocket('ws://www.example.com/server.php'); let stringData='hello world'; let arrayBufferData = Uint8Array.from(['f','o','o']); let blobData =new Blob(['f','o','o']); socket.send(stringData); socket.send(arrayBufferData); socket.send(blobData);
   2.服务器向客户端发送消息时,WebSocket对象上会触发message事件。
		  这个message事件与其他消息协议类似,可以在event.data属性访问到有效载荷
		  
socket.onmessage=function(event){ let data= event.data; //对数据的操作,event.data和发送数据类似, //为字符串,ArrayBuffer或Blob, //取决于websocket对象的binaryType属性决定 }
		  
四、其他事件
              WebSocket对象在连接生命周期中可能触发3个其他事件。
		              open:在连接成功船舰时触发
			          error:在发生错误时触发,连接无法存续
			          close:在连接关闭时触发
let socket= new WebSocket('ws://www.example.com/server.php');
socket.onopen=function(){
alert('Connection established');
}
socket.onerror=function(){
alert('Connection error');
}
socket.onclose=function(){
alert('Connection closed');
}
     这些事件中只有close事件的event对象上有额外信息。
		       这个对象上有三个属性
		              1. wasclean  布尔值,表示连接是否干净关闭
			          2. code   来自服务器的数值状态码;
			          3. reason  字符穿,包含了服务器发出的信息
socket.onclose=function(){ alert('Connection closed'); console.log(`as clean ? ${event.wasclean} Code= ${event.code} Reason=${event.reason} `); }
	  
	    
	
		  
		   
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号