1、什么是webSocket?
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
2、webSocket可以用来做什么?
利用双向数据传输的特点可以用来完成很多功能,不需要前端**轮询**,浪费资源。例如:
1. 通告功能
2. 聊天功能
3. 实时更新数据功能
4. 弹幕
3.WebSocket使用
WebSocket属性
* Socket.readyState:这是个只读属性,y用来表示连接状态
* 0:未连接 1:连接已建立 2.连接z正在关闭 3.连接已关闭或打不开连接
* Socket.bufferedAmount:z也是只读属性。主要是计算还没有被send()发出的UTF-8文本字节数。
WebSocket方法
Socket.send():向服务器发送数据
Socket.close():关闭连接
WebSocket事件
Socket.onopen:连接建立时触发
Socke.onmessage:客户端接受服务端数据时触发
Socket.onerror:通信错误时触发
Socket.onclose:连接关闭时触发
短轮询:
短轮询是浏览器每隔一段时间向浏览器发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。 本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。
优点:比较简单,易于理解。
缺点:需要不断的建立http连接,严重浪费了服务器端和客户端的资源。尤其是在客户端,距离来说,如果有数量级想对比较大的人同时位于基于短轮询的应用中,那么每一个用户的客户端都会疯狂的向服务器端发送http请求,而且不会间断。人数越多,服务器端压力越大,这是很不合理的。
长轮询:
ajax实现: 当服务器收到客户端发来的请求后,服务器端不会直接进行响应,而是先将这个请求挂起,然后判断服务器端数据是否有更新。如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制(服务器端设置)才返回。 客户端JavaScript响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
长轮询和短轮询比起来,明显减少了很多不必要的http请求次数,相比之下节约了资源。长轮询的缺点在于,连接挂起也会导致资源的浪费。
轮询与长轮询都是基于HTTP的,两者本身存在着缺陷:轮询需要更快的处理速度;长轮询则更要求处理并发的能力;
两者都是“被动型服务器”的体现:服务器不会主动推送信息,而是在客户端发送ajax请求后进行返回的响应。而理想的模型是"在服务器端数据有了变化后,可以主动推送给客户端",这种"主动型"服务器是解决这类问题的很好的方案。Web Sockets就是这样的方案。