介绍
WebSocket protocol 是HTML5一种新的协议,它是实现了浏览器与服务器全双工通信(full-duplex)。WebSocket协议使用ws或者wss://开头。
Socket.io将Websocket和轮询 (Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时通信机制。也就是说,Websocket仅仅是 Socket.io实现实时通信的一个子集。原因在于不是所有的浏览器都支持Websocket,通过Socket.io的封装,任何浏览器都可以使用Socket.io来建立异步的连接。Socket.IO支持4种协议:WebSocket、htmlfile、xhr-polling、jsonp-polling。
原理
WebSocket 使用JavaScript调用浏览器的API发出一个WebSocket请求至服务器,经过一次握手,和服务器建立了TCP通讯。
Socket.io中主要使用了websocket,将轮询作为其辅助选项,提供的是相同的接口。其与node.js一样,也是事件驱动的。
连接
Browser与WebSocket服务器通过TCP三次握手建立连接,如果这个建立连接失败,那么后面的过程就不会执行,Web应用程序将收到错误消息通知。 TCP建立连接成功后,客户端浏览器首先要向服务器发起一个HTTP请求,这个请求和通常的HTTP请求不同,包含了一些附加头信息,其中附加头信息”Upgrade: WebSocket”表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。
websocket不仅支持 WebSocket,还支持许多种轮询机制以及其他实时通信方式,并封装了通用的接口。这些方式包含 Adobe Flash Socket、Ajax 长轮询、Ajax multipart streaming 、持久 Iframe、JSONP 轮询等。换句话说,当 Socket.IO 检测到当前环境不支持 WebSocket 时,能够自动地选择最佳的方式来实现网络的实时通信。
消息类型
WebSocket对象一共支持四个消息 onopen, onmessage, onclose和onerror。当Browser和WebSocketServer连接成功后,会触发onopen消息;如果连接失败,发送、接收数据 失败或者处理数据出现错误,browser会触发onerror消息;当Browser接收到WebSocketServer发送过来的数据时,就会触发 onmessage消息,参数evt中包含server传输过来的数据;当Browser接收到WebSocketServer端发送的关闭连接请求时, 就会触发onclose消息。我们可以看出所有的操作都是采用消息的方式触发的,这样就不会阻塞UI,使得UI有更快的响应时间,得到更好的用户体验。
应用
Websocket基于Web应用;SocketIO基于 Node 的 JavaScript 框架。
优势
1、能更好的节省服务器资源和带宽并达到实时通讯。
2、本质上是一个TCP连接,所以数据传输的稳定性强和数据传输量比较小。
浏览器支持
Websocket支持Chrome,Safrie,Firefox,Opera,IE。
SocketIO可以工作在任何平台、浏览器或移动设备。