为什么传统的HTTP协议不能做到WebSocket实现的功能?这是因为HTTP协议是一个请求-响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。
HTTP协议其实也能实现啊,比如用轮询或者Comet。轮询是指浏览器通过JavaScript启动一个定时器,然后以固定的间隔给服务器发请求,询问服务器有没有新消息。这个机制的缺点一是实时性不够,二是频繁的请求会给服务器带来极大的压力。
以上两种机制都治标不治本,所以,HTML5推出了WebSocket标准,让浏览器和服务器之间可以建立无限制的全双工通信,任何一方都可以主动发消息给对方。
WebSocket是为解决客户端与服务端实时通信而产生的技术,websocket协议本质上是一个基于tcp的协议,首先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手,然后创建一个用于交换数据的TCP连接,此后服务端与客户端通过此TCP连接进行实时通信。
由于 模块不支持多服务器地址和断线重连机制,所以我们开发的erayt-elws在原来基础上增加了这两个功能,也就是说erayt-elws除了支持websocket通讯以外,还支持配置多个服务端地址,并且当服务端某个机器宕机或者网络断线的情况下,组件能够在一定时间间隔内多次重连该机器,如果超时则更换服务端地址进行连接,直到连接成功或者手动关闭erayt-elws组件为止。
安装
使用
- 调用模块
- 配置连接
配置多个服务端的地址,服务端地址之间用;
进行分割,最后面两个参数分别为每次重连的定时器间隔(单位为ms),以及每个服务端地址重连的最大次数。
client.onopen = function () {
//此链接开启后做些什么
};
//对接收到的消息做些什么
};
//处理错误
client.onclose = function (){
//连接关闭时做些什么
};
- 开始连接
- 关闭连接
- 发送数据
其他的一些发送PING、PONG或者暂停继续的操作参考官方文档: