初识webSocket及其使用
阅读目录
1、什么是webSocket?
2、webSocket实现原理
3、webSocket优点
4、webSocket和socket的区别
5、webSocket API
6、webSocket的使用
================================================================
1、什么是webSocket?
webSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。默认端口号80和443
2、webSocket实现原理
在实现webSocket连线过程中,需要通过浏览器发出webSocket连线请求,然后服务器发出回应,这个过程通常称为“握手”。在webSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以互相传递数据。
3、webSocket优点
在以前的消息推送机制中,用的都是Ajax轮询(polling),在特定的时间间隔由浏览器自动发出请求,将服务器的消息主动获取回来,这种方式是非常耗资源的,因为它本质还是http请求,而且显得非常笨拙。而 webSocket在浏览器和服务器完成一个握手的动作,在建立连接之后,服务器可以主动传送数据给客户端,客户端也可以随时向服务器发送数据。
4、 webSocket和socket的区别
1) webSocket
-
websocket通讯的建立阶段是依赖于http协议的。最初的握手阶段是http协议,握手完成后就切换到websocket协议,并完全与http协议脱离了。
-
建立通讯时,也是由客户端主动发起连接请求,服务端被动监听。
-
通讯一旦建立连接后,通讯就是“全双工”模式了。也就是说服务端和客户端都能在任何时间自由得发送数据,非常适合服务端要主动推送实时数据的业务场景。
-
交互模式不再是“请求-应答”模式,完全由开发者自行设计通讯协议。
-
通信的数据是基于“帧(frame)”的,可以传输文本数据,也可以直接传输二进制数据,效率高。当然,开发者也就要考虑封包、拆包、编号等技术细节。
-
没有同源限制,客户端可以与任意服务器通信。
-
协议标识符是ws(如果加密,则为wws),服务器网址是url。
2) socket
-
服务端监听通讯,被动提供服务;客户端主动向服务端发起连接请求,建立起通讯。
-
每一次交互都是:客户端主动发起请求(request),服务端被动应答(response)。
-
服务端不能主动向客户端推送数据。
-
通信的数据是基于文本格式的。二进制数据(比如图片等)要利用base64等手段转换为文本后才能传输。
5、webSocket API
(1)webSocket构造函数
用于创建一个webSocket实例,执行后,客户端就会与服务器端连接
var ws = new WebSocket('ws://localhost:8080/mesg'); //服务器地址就是URL,如:ws://localhost:8080/mesg
(2)webSocket.readyState
readyState属性返回实例对象的当前状态,共有四种。
connecting:值为0,表示正常连接
open:值为1,表示连接成功,可以开始通信
closing:值为2,表示连接正在关闭
closed:值为3,表示连接已经关闭,或者打开连接失败
(3)webSocket.onopen
onopen(): 连接成功后的回调函数
(4)webSocket.onclose
onclose(): 连接关闭后的回调函数
(5)webSocket.onmessage
onmessage(): 接收到服务器数据后的回调函数
(6)webSocket.send()
send方法用于向服务器发送数据
(7)webSocket.bufferedAmount
bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去。它可以用来判断发送是否结束
![]()
![](data:image/png;base64,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la0VchaRInBIWiC0fZZERLMYA0eUpuO+KXZJJYv8oSLJm4K8LV4UrwueZRGOyytvvlaIYie6eF6FeS4kZbuR1+BF+b4c5MkZIRHeX1d2CooPlcRcoXsaClGqXCQtEYs3LQpuEZmbjNQwLSk6OVC0BCUTLLpGRPQ6YOAgIiIixzFwEBERkeMYOIiIiMhxDBxERETkOAYOIiIicty0BA4iIiJ6vTBwEBERkeMYOIiIiMhxDBxERETkOAYOIiIichwDBxERETluGgPHEQw/eYInwvj9WxjY51OUISIiotkgLgKHbhR9m1XliIiIaKab/i6VzGocvPpACx2jF2rVZYiIiGhGi48xHEt7cEcEjgf99er9RERENKPFyaBRvXuFgYOIiGh2iq/AcbFJsY+IiIhmujgJHAcxOP4ET8ZvoacxD25lGSIiIpqp4iRwJMDXOojRfwdmrQx3qMsRERHRzBM/gWPfFQYOIiKiWSpOAkczrjyQXSrD6K5KV+wnIiKimYyDRomIiMhx8RU4OC2WiIhoVmLgICIiIscxcBAREZHj4iNwVPZyaXMiIqJZbNoDhzuvCT23xrWpsHd6VyrLEBER0cw2jYFD70Yx19148uQOeparyhEREdFMFxeBY3z0Fnre5vobREREs1WcDBolIiKi2YyBg4iIiBzHwEFERESOY+AgIiIixzFwEBERkeMYOIiIiMhxDBxERETkOAYOIiIichwDBxERETmOgYOIiIgcx8BBREREjmPgICIiIscxcBAREZHjGDiIiIjIcQwcRERE5DgGDiIiInJYAv4/e+Js0u+9q3YAAAAASUVORK5CYII=)
(7)webSocket.onerror
onerror(): 连接发生错误后的回调函数
(8)webSocket.heartMessage
heartMessage: 发送给后台的心跳包参数(必填),给服务器端的心跳包就是定期给服务器发送消息
(9)webSocket.timer
timer: 给后台传送心跳包的时间间隔,不传时使用默认值3000毫秒
(10)webSocket.isReconnect
isReconnect: 连接断掉是否重新连接,传true为重新连接
6、webSocket的应用(Github地址:https://github.com/sherry726/webSocket)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>webSocket封装</title> 8 </head> 9 <body> 10 <script> 11 /* webSocket封装 12 * @param url: webSocket接口地址与携带参数(必填) 13 * @param onopen(): 连接成功后的回调函数 14 * @param onmessage(): 接收到服务器数据后的回调函数 15 * @param onclose(): 连接关闭后的回调函数 16 * @param onerror(): 连接发生错误后的回调函数 17 * @param heartMessage: 发送给后台的心跳包参数(必填),给服务器端的心跳包就是定期给服务器发送消息 18 * @param timer: 给后台传送心跳包的时间间隔,不传时使用默认值3000毫秒 19 * @param isReconnect: 连接断掉是否重新连接,传true为重新连接 20 */ 21 function useWebSocket(url,onOpenFunc,onMessageFunc,onCloseFunc,onErrorFunc,heartMessage,timer,isReconnect){ 22 let isConnected = false; //设置已连接webSocket标识 23 let ws = null; //定义webSocket对象 24 //创建并连接webSocket 25 let connect = function(){ 26 if(!isConnected){ 27 //若未连接webSocket,则创建一个新的webSocket 28 console.log(url); 29 ws = new WebSocket(url); 30 isConnected = true; 31 } 32 } 33 //向后台发送心跳消息 34 let heartCheck = function(){ 35 ws.send(JSON.stringify(heartMessage)); 36 } 37 //初始化事件回调函数 38 let initEventHandle = function(){ 39 console.log('已连接'); 40 ws.addEventListener('open',function(event){ 41 //给后台发心跳请求 42 heartCheck(); 43 //若传入函数,执行onOpenFunc 44 if(!onOpenFunc){ 45 return false; 46 }else{ 47 onOpenFunc(event); 48 } 49 }) 50 ws.addEventListener('message',function(event){ 51 //接收到任何后台的消息都说明当前连接是正常的 52 if(!event){ 53 return false; 54 }else{ 55 //若获取到后台消息,则timer毫秒后再次发起心跳请求给后台,检测是否断开连接 56 setTimeout(()=>{ 57 heartCheck(); //给后台发心跳请求 58 },!timer ? 3000 : timer) 59 } 60 //若传入了函数,执行onMessageFunc 61 if(!onMessageFunc){ 62 return false; 63 }else{ 64 onMessageFunc(event); 65 } 66 }) 67 ws.addEventListener('close',function(event){ 68 //若传入函数,执行onCloseFunc 69 if(!onCloseFunc){ 70 return false; 71 }else{ 72 onCloseFunc(event); 73 } 74 if(isReconnect){ //若断开立即重新连接标志为true 75 connect(); //重新连接webSocket 76 } 77 }) 78 ws.addEventListener('error',function(event){ 79 //若传入函数,执行onErrorFunc 80 if(!onErrorFunc){ 81 return false; 82 }else{ 83 onErrorFunc(event); 84 } 85 if(isReconnect){ //若断开立即重新连接标志为true 86 connect(); //重新连接webSocket 87 } 88 }) 89 } 90 window.onload = function(){ 91 //初始化webSocket 92 (function(){ 93 //1.创建并连接webSocket 94 connect(); 95 //2.初始化事件回调函数 96 initEventHandle(); 97 //3.返回是否已连接 98 return ws; 99 })() 100 } 101 } 102 useWebSocket("ws://10.170.6.45:8888/websocket/23", //服务器url 103 null, //onopen的回调函数 104 function(event){ 105 let res = event.data; //后端返回的数据,onmessage的回调函数 106 console.log(res); 107 }, 108 null, //onclose的回调函数 109 null, //onerror的回调函数 110 { //心跳包消息 111 "action":"66", 112 "eventType":"88", 113 "requestId":"123" 114 }, 115 null, //传送心跳包的间隔时间 116 true //true表示连接断开立即重新连接 117 ) 118 </script> 119 </body> 120 </html>
具体思路:
1、判断当前浏览器是否支持webSocket;(本代码中缺失这块代码,有需要可以补上)
2、创建并连接webSocket;
3、初始化事件回调函数;
4、返回是否已连接。