• 双工通信的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

  • 相关阅读:
    Python学习1——语法
    Java正则表达式:Pattern类和Matcher类
    BufferedReader 是缓冲字符输入流
    asm 01 开发环境
    vim一个不使用插件的基本配置
    sublime
    一些东西
    jshint 一些选项(转载)
    prototype 和__proto__
    vim 基本使用
  • 原文地址:https://www.cnblogs.com/ltfxy/p/16320346.html
Copyright © 2020-2023  润新知