双工通信的Websocket

WebSocket 是独立的、创建在 TCP 上的协议,Websocket 通过HTTP/1.1 协议的101状态码进行握手。

websocket可以看做是HTTP为了支持长连接所打的一个大补丁
和HTTP有一些共性,是为了解决之前谈过的为了解决http瓶颈所作的改良设计
websocket和http有交集,是相交的关系,但不是包含的协议

  1. 非持久化的HTTP
    Request = response
    一个Request只能有一个response
    Connection:keep-alive只是保持tcp连接

  2. websocket
    基于HTTP协议的,借用HTTP协议完成一部分握手

websocket握手核心:
Upgrade:websocket
Connection:Upgrade
告诉Apache或者nginx注意这是websocket

Sec-WebSocket-Key:x33.....== base64加密
Sec-WebSocket-Protocol:chat,superchat // 用户定义字符串,区分同一个用户不同url所需要的协议
Sec-WebSocket-version:13 //协议的版本

HTTP瓶颈是:被动性,请求只能由客户端主动发起,服务器不能主动向客户端发起连接
处理机制:

  1. ajax轮询 隔几秒就发请求,询问是否有新消息
  2. long poll 原理和ajax差不多,采取的是阻塞模型,客户端发起连接之后,如果没消息就等着,一直到有了新消息才返回

优点
避免HTTP的非状态性,都是多次请求和响应都是在一次连接中
避免多次解析重复的请求响应头信息造成的资源浪费
服务端不必等待客户端发送连接,实时性较好
全双工方式
减少通信量(每次解析头部信息)
需要升级为HTML5
多路复用 mult-placy(查),不用的url可以复用相同的url,这些都是http长连接不能做到的

总结:
websokcet使得客户端和服务器之间的数据交换简单,允许服务器主动向客户端推送数据
在WebSocket中,只需要一次握手,就可以创建持久性的连接,并进行双向双工

使用广泛:聊天室、社交网站

握手过程

http阶段:
基于http1.1

  1. 握手请求:Upgrrade:webcoket。刚开始是http协议,所以由客户端发起连接
  2. 握手响应:101 Switching Protocols 切换成WebSocket协议

WebSocket阶段:
url格式:ws://example.com wss://example.com/
WebSocket协议支持全双工通信,因此服务器端不必等待请求,可直接发送数据

Demo: 基于Websocket实现一个实时通讯聊天室

https://www.cnblogs.com/ltfxy/p/12527794.html

posted @ 2022-05-28 12:21  IslandZzzz  阅读(119)  评论(0编辑  收藏  举报