WebSocket长连接实现
由于⼯作需要,近期需要做⼀个即时通讯的功能,所以就单独去了解了⼀下WebSocket的相关知识,学习、使⽤⼀下WebSocket。
什么是WebSocket
WebSocket是HTML5新增的协议,它的⽬的是在浏览器和服务器之间建⽴⼀个不受限的双向通信的通道,⽐如说,服务器可以在任意时刻发送消息给浏览器。
为什么传统的HTTP协议不能做到WebSocket实现的功能?
这是因为HTTP协议是⼀个请求-响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。
其实在之前有两个替代⽅案,不过都不能完全满⾜需求。⼀个是轮询,⼀个是comet。简单理解,轮询就是通过js设置⼀个定时器不断查询接⼝,但是这样做会造成⼀个问题,定时器频率太慢相当于延时会很长,频率太快⼜会给服务器带来很⼤的压⼒;⽽comet可以理解为⼀次请求如果没有超过预定时间或者没有返回数据,就会⼀直保持链接状态,在服务器挂起⼀个线程,这就代表着也要消耗服务器资源,⽽且,⼀个HTTP连接在长时间没有数据传输的情况下,链路上的任何⼀个⽹关都可能关闭这个连接,⽽⽹关是
我们不可控的,这就要求Comet连接必须定期发⼀些ping 数据表⽰连接“正常⼯作”。
所以综上WebSocket是⽬前实现实时通讯的最优⽅案。
⼀、We b Socke t基础
1. WebSocket 属性
属性描述
State 只读属性 readyState 表⽰连接状态,可以是以下值:0 - 表⽰连接尚未建⽴;1 - 表⽰连接已建⽴,可以进⾏通信;2 - 表⽰连接正在进⾏关闭;3 - 表⽰连接已经关闭或者连接不能打开。
Socket.buffe redAmount 只读属性 bufferedAmount 已被 send() 放⼊正在队列中等待传输,但是还没有发出的 UTF-8 ⽂本字节数。
2. WebSocket 事件
事件事件处理程序描述
websocket和socketpen连接建⽴时触发
ssage客户端接收服务端数据时触发
r通信发⽣错误时触发
lose连接关闭时触发
3. WebSocket ⽅法
⽅法描述
Socket.send()使⽤连接发送数据
Socket.close()关闭连接⼆、代码⽰例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论