实现了用http不容易实现的服务器端与客户端之间进行的非http的通信机制,建立一个非http的双向连接(全双工通信),这个连接是实时的永久的,除非被显式关闭。这意味着当服务器想向客户端发送消息时,可以立即将消息推送到客户端的浏览器,无需重新建立连接。
比如用来实现聊天室,实时的接收传递消息。
使用WebSockets API(算了api还是要用的时候查吧 太容易忘记了)
1 | var ws = new WebSocket(wss://); |
readyState的属性值获取WebSocket对象的状态
connecting 0 表示正在连接
open 1 表示已经建立连接
closing 2 表示正在关闭连接
closed 3 表示连接已经关闭
WebSocket和http协议有区别也有联系。首先http协议中请求和响应是成对存在严格对应的,在http1.1中的keep-alive实现可将多个http请求合并成一个,但是它和WebSocket还是不一样,它依然是请求和响应一一对应的。WebSocket是一个新的协议,借助于http协议完成握手。
WebSocket的连接请求跟http请求相似,但是多出了这么两行upgrade:wesocket connection:upgrade
这两行告诉服务器,我是一个WebSocket协议。
传统的技术当然也可以实现信息的即时发送和获取,依赖于ajax轮询和long poll。
轮询,顾名思义就是隔一会查看一下是否有新的消息,需要服务器有很快的处理速度。
long poll 就是相当于发起请求后没收到消息就赖着不走了这么个样子。需要有很高的并发。
当然以上两种对我来说都是停留在了理论层面,我并没有真正去实践过。有错误的地方,日后改正。