• WebSocket入门


    一、什么是WebSocket

    WebSocket是和HTTP类似的可以实现全双工可持久连接通信的应用层协议。WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。

    持久连接通信:这里的持久通信能力指的是协议本身的能力,我们当然可以通过编程的方式实现这种功能,比如轮询的方式,但这种方式又麻烦又浪费性能。

    二、为什么需要WebSocket

    WebSocket主要是用来弥补HTTP协议在持久通信能力上的不足。

    HTTP协议本身是无状态协议,每一个新的HTTP请求,只能通过客户端主动发起,通过 建立连接-->传输数据-->断开连接 的方式来传输数据,就是我们平时经常用到的Request和Response,传送完连接就断开了,也就是这次HTTP请求已经完全结束了,从下面的图中可以很直观的看出区别(虽然http1.1增加了keep-alive请求头可以通过一条通道请求多次,但本质上还是一样的)。并且服务器是不能主动给客户端发送数据的(因为之前的请求得到响应后连接就断开了,之后服务器根本不知道谁请求过),客户端也不会知道之前请求的任何信息。所以说,http协议本身是没有持久通信能力的,但是我们在实际的应用中,是很需要这种能力的,例如:即时聊天通信、多玩家游戏、在线协同编辑/编辑等等。

    三、WebSocket的特点

    • 建立在 TCP 协议之上,服务器端的实现比较容易。
    • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
    • 数据格式比较轻量,性能开销小,通信高效。
    • 可以发送文本,也可以发送二进制数据。
    • 没有同源限制,客户端可以与任意服务器通信。
    • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

    四、WebSocket的原理

    与HTTP协议一样,WebSocket协议也需要通过已建立的TCP连接来传输数据。具体实现上是通过HTTP协议建立通道,然后在此基础上用真正的WebSocket协议进行通信,所以WebSocket协议和http协议是有一定的交叉关系的。

    接下来我们看一下WebSocket具体的请求内容:

    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13
    Origin: http://example.com

     其中请求头中重要的字段:

    1. Connection和Upgrade:告诉服务器,客户端发起的是WebSocket协议请求

    2. Sec_WebSocket-Protocol:是一个用户定义的字符串,用来区分同 URL 下,不同的服务所需要的协议

    3. Sec-WebSocket-Key:是一个Base64编码值,由浏览器随机生成

    4. Sec-WebSocket-Version:表明客户端所使用的协议版本

    而得到的响应内容中重要的字段:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
    Sec-WebSocket-Protocol: chat

    1. Connection和Upgrade字段:与请求头中的作用相同

    2. Sec-WebSocket-Accept:表明服务器接受了客户端的请求

    五、关于WebSocket的兼容情况

    WebSocket要求IIS的版本至少是8.0及以上,所以要求操作系统必须是Windows 2012 或 Windows 8及以上,并且需要在添加IIS角色时要勾选上安装WebSocket,如下图(以下截图来自Win10操作系统):

     六、实战(基于.net core)

    简单的服务器应答:WebSocketDemo

  • 相关阅读:
    开源跳板机(堡垒机)系统 Jumpserver安装教程(带图文)
    运维自动化管理服务器 CheungSSH
    代码托管服务平台GitHub
    Java 博客系统 Tale
    基于代码生成器的快速开发平台 JEECG
    中文企业云操作系统 CecOS
    Python基础学习(一)之Python的概述与环境安装
    Python3.x安装教程及环境变量配置
    PHP Primary script unknown 终极解决方法
    正则表达式备忘录-Regular Expressions Cheatsheet中文版
  • 原文地址:https://www.cnblogs.com/wcrBlog/p/12120293.html
Copyright © 2020-2023  润新知