为什么传统的HTTP协议不能做到WebSocket实现的功能?这是因为HTTP协议是一个请求-响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。

    HTTP协议其实也能实现啊,比如用轮询或者Comet。轮询是指浏览器通过JavaScript启动一个定时器,然后以固定的间隔给服务器发请求,询问服务器有没有新消息。这个机制的缺点一是实时性不够,二是频繁的请求会给服务器带来极大的压力。

    以上两种机制都治标不治本,所以,HTML5推出了WebSocket标准,让浏览器和服务器之间可以建立无限制的全双工通信,任何一方都可以主动发消息给对方。

    WebSocket是为解决客户端与服务端实时通信而产生的技术,websocket协议本质上是一个基于tcp的协议,首先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手,然后创建一个用于交换数据的TCP连接,此后服务端与客户端通过此TCP连接进行实时通信。

    由于 模块不支持多服务器地址和断线重连机制,所以我们开发的erayt-elws在原来基础上增加了这两个功能,也就是说erayt-elws除了支持websocket通讯以外,还支持配置多个服务端地址,并且当服务端某个机器宕机或者网络断线的情况下,组件能够在一定时间间隔内多次重连该机器,如果超时则更换服务端地址进行连接,直到连接成功或者手动关闭erayt-elws组件为止。

    安装

    使用

    • 调用模块
    • 配置连接
      配置多个服务端的地址,服务端地址之间用;进行分割,最后面两个参数分别为每次重连的定时器间隔(单位为ms),以及每个服务端地址重连的最大次数。
    1. client.onopen = function () {
    2. //此链接开启后做些什么
    3. };
    4. //对接收到的消息做些什么
    5. };
    6. //处理错误
    7. client.onclose = function (){
    8. //连接关闭时做些什么
    9. };
    • 开始连接
    • 关闭连接
      • 发送数据

      其他的一些发送PING、PONG或者暂停继续的操作参考官方文档: