简单了解WebSocket

WebSocket协议是一种基于TCP协议的新型网络协议。它允许服务器推送消息给客户端,实现了浏览器和服务器之间的双工通信

HTTP

HTTP(超文本传输协议)是互联网应用最广泛的网络协议,但是它也有着自己的局限性。HTTP协议是单向,且无状态的。意思就是客户端(浏览器)发起一次HTTP请求,不管服务器能否进行正常的响应,响应结束后,这次通信就会断开。并且服务器不具备有主动向客户端(浏览器)发送消息的能力。

其局限性在面对如下应用场景时就会暴露出来:

  1. 服务器端的数据不定时更新,可能间隔很短,也可能间隔很长
  2. 实时双工的通信应,如即时聊天

当然,我们可以通过一些轮询的方法,来从功能上实现这个需求。

比如,我们可以设置一个请求间隔非常短的定时器,在需求的间隔下,不停地请求服务端,再根据服务端的相应来进行数据的更新。但是这无疑是很耗费性能的。

如果更新间隔非常长,那么可能我们大部分的请求都是无用的。

所以,我们需要一种能够双向实时通信的网络协议,来补足HTTP协议的局限。

WebSocket协议由此得以出现。

WebSocket

WebSocket协议的连接,首先我们需要服务器对WebSocket的支持。我们通过浏览器发送一个WebSocket连接请求,然后服务器做出回应。这个连接的过程通常被称为握手。在握手后,服务器和浏览器之间就建立了一个数据传送通道,可以互相传送消息。

优点

在建立了WebSocket连接后,服务器不需要再等待客户端请求数据才能做出相应,服务器可以在数据更新后主动向客户端推送此次更新。

API

HTML5的新特性内包含了一些WebSocket协议的API。

创建对象

1
var ws = new WebSocket(url, name);

url为WebSocket服务器的地址,name为发起握手的协议名称,可选。

发送消息

1
ws.send(msg);

msg为文本消息,字符串格式。其他类型可以通过二进制来发送。

接收消息

1
2
3
ws.onmessage = (function () {
// do something
})();

错误处理

1
2
3
ws.onerror = (function () {
// do something
})();

关闭连接

1
ws.close();

兼容性

Can I Use

有钱,任性!!!