• WebSocket详解


    websocket是什么?

    答: 它是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

    为什么需要websocket? 疑问? 我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

    答:是因为 HTTP 协议有一个缺陷,通信只能由客户端发起,然后服务器再做出响应,服务器不能主动向客户端推送消息。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。WebSocket协议的最大特点是服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送消息,是真正的双向平等对话,属于服务器推送技术的一种。

    其他特点包括:

    (1)建立在 TCP 协议之上,服务器端的实现比较容易。

    (2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

    (3)数据格式比较轻量,性能开销小,通信高效。

    (4)可以发送文本,也可以发送二进制数据。

    (5)没有同源限制,客户端可以与任意服务器通信。

    (6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。 ws://example.com:80/some/path

    WebSocket目前支持两种统一资源标志符wswss,类似于HTTP和HTTPS。

    实现原理

    浏览器发出webSocket的连线请求,服务器发出响应,这个过程称为握手,握手的过程只需要一次,就可以实现持久连接。

    握手与连接

    浏览器发出连线请求,此时的request如下:

    通过get可以表明此次连接的建立是以HTTP协议为基础的,返回101状态码。

    如果不是101状态码,表示握手升级的过程失败了

    101是Switching Protocols,表示服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送这个响应后的空档,将http升级到webSocket。

    WebSocket 的握手是一个标准的 HTTP GET 请求,但要带上两个协议升级的专用头字段:

    “Connection: Upgrade”,表示要求协议“升级”;
    “Upgrade: websocket”,表示要“升级”成 WebSocket 协议。

    另外,为了防止普通的 HTTP 消息被“意外”识别成 WebSocket,握手消息还增加了两个额外的认证用头字段(所谓的“挑战”,Challenge):

    Sec-WebSocket-Key:一个 Base64 编码的 16 字节随机数,作为简单的认证密钥;
    Sec-WebSocket-Version:协议的版本号,当前必须是 13。

    服务器接到浏览器的连线请求返回结果如下:

    Upgrade和Connection来告诉浏览器,服务已经是基于webSocket协议的了,让浏览器也遵循这个协议

    Sec-WebSocket-Accept是服务端确认后并加密后的Sec-WebSocket-Accept

    至此,webSocket连接成功,接下来就是webSocket的协议了。

    我话讲完!谁赞成?谁反对?
  • 相关阅读:
    Spring Cloud 企业云服务架构common-service代码分析
    Spring Cloud云服务架构代码结构构建
    配置环境真是复杂的事情
    一起来关注c11 吧!!!
    utubu
    今天开放了这个居然
    编译linux程序,unistd.h vc的处理
    postgres 设置密码
    提供各种开源软件编译服务的想法
    CSS基础
  • 原文地址:https://www.cnblogs.com/wffzk/p/15682367.html
Copyright © 2020-2023  润新知