首页 > 代码库 > WebSokcet原理和使用

WebSokcet原理和使用

一:WebSokcet产生的背景

         现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP request的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。
         WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,WebSocketAPI被W3C定为标准。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。


二:WebSocket协议与握手

  WebSocket协议的格式为 ‘ws://IP:Port‘ 或者“wss://IP:Port‘。其中wss表示进行加密传输的websocket协议。

        WebSocket协议与传统的Socket协议一样,都需要进行“握手”。但是WebSocket的“握手”阶段是通过Http协议进行的,“握手”行为通过Request/Response的Header完成,只需要交换很少的数据,便可以创建基于TCP/IP协议的双工通道。

        在握手请求时,客户端向服务端发送了一个Get请求,并且在请求的头中增加了这么几个Key
     Origin:http://IP:Port 表示客户端的地址
        Connection:Upgrade / Upgrade:WebSocket 表示本次请求是要进行WebSocket的握手动作
   Sec-WebSocket-Version: 13 表示浏览器支持的WebSocket版本信息
   Sec-WebSocket-Key:     这是一个由客户端随机生成的字符串


    在服务器响应的握手信息中Sec-WebSocket-Accept:的值为服务器通过客户端Header的Sec-WebSocket-Key的值进行计算并加密的结果。并且服务器的响应状态为101  表示服务器端已经理解了客户端的需求,并且客户端需要根据Upgrade中的协议类型,切换为新的协议来完成后续的通信。这时候我们的TCP/IP双工通道就已经建立了。

三:WebSokcet常用的方法和属性

 主要方法:

            1、send() 向远程服务器发送数据

            2、close() 关闭该websocket链接

    监听函数:

  onopen :握手完成并创建TCP/IP通道后

    onclose  :断开连接后

    one rror  :发生错误时

    onmessage:接收到服务端消息时

  readyState属性检查连接状态

    1、CONNECTING(0) websocket正尝试与服务器建立连接

    2、OPEN(1) websocket与服务器已经建立连接

    3、CLOSING(2) websocket正在关闭与服务器的连接

    4、CLOSED(3) websocket已经关闭了与服务器的连接


WebSokcet原理和使用