当前位置: 首页 > news >正文

Web Scoket简述

Web Socket 简介

初次接触 Web Socket 的人,我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

因为 HTTP 协议有一个缺陷:通信只能由客户端发起。http基于请求响应实现。
(准确来说HTTP只能由 客户端 单向向 服务端 请求
【如果想实现连续获取服务端的数据变化,只能通过 "轮询" 的方式获取】
(例如: 保持登录的状态的 心跳检测 机制))

Web Socket 的特点

是一个长时链接,实现与服务端的全双工,双向的通讯。【客户端与服务端的双向通讯】

URl变化

使用的是自定义协议,所以不能用 http:// 或者 https://(不安全链接),而是要使用 ws:// 和 wss:// (安全链接)

使用自定义协议的好处

客户端与服务端之前发送非常少的数据,不会对http造成负担。
使用更小的数据包,可以让 Web Socket  非常适合宽带和延迟问题比较明显的移动应用。
所有浏览器都支持【一句概述:数据少,发送快,不会对http造成请求,交互效果好。】

缺点:定义协议的时间比定义JavaScript API要长。

Web Socket API

  • 实例化Web Socket
  var ws = new WebSocket('ws://xxx.xx.xx') 
  • send 消息发送

    ws.send()
    
  • messag 消息接受

    ws.onmessage() = function(event){console.log(event.data)
    }
    
  • close 断开链接

    ws.close()
    

其他事件

  • open 在链接成功建立时触发

    ws.onopen = function() {console.log("链接建立成功")
    }
    
  • error 在发生错误时触发,链接无法存续

    ws.onerror = function() {console.log("链接失败")
    }
    
  • close 在关闭时触发

    ws.onclose = function() {console.log("链接失败")
    }
    

基本步骤

  1. 浏览器发出链接请求(链接不受同源策略的影响)
  2. 服务器告知链接成功
  3. 双方进行双向通讯
  4. 关闭连接

在这里插入图片描述

示例代码

// 打开websocket连接
// WebSocket 是浏览器的内置对象
var ws = new WebSocket('ws://xxx.xx.xx') // 建立与服务端地址的连接// onopen是webSocket约定事件名
// 当本地客户端浏览器与服务器建立连接之后,就会执行onopen的回调
ws.onopen = function () {// 如果执行此函数 表示与服务器建立关系成功
}// 发送消息
ws.send('消息')// 接收消息
ws.onmessage = function (event) {// event中的data就是服务器发过来的消息
}ws.close()
// 关闭连接成功
ws.onclose = function () {// 关闭连接成功
}
http://www.lryc.cn/news/92628.html

相关文章:

  • “Docker 技术在企业中的应用及挑战解决方案“
  • vue中开发包、生产包、全局包的区别以及安装语法
  • list的模拟实现
  • ChatGLM简介和SSE聊天接口测试效果
  • darknet yolo标注、训练详细说明
  • chatgpt赋能python:Python如何产生随机整数?
  • 大话Stable-Diffusion-Webui-客制化主题(四)
  • Excel函数VLOOKUP常用方法
  • systemV的工作原理+原理代码
  • Kubeflow--TFJob实现机制学习
  • 百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性
  • CKA 01_docker部署Kubernetes 部署docker 使用kubeadm引导集群 安装Pod网络
  • Redis的使用规范小建议
  • 操作受限的线性表——栈
  • C++基类指针或引用指向或引用派生类对象(实现动态多态四种手段)父类指针访问子类成员变量(需要dynamic_cast)
  • WTM框架运行报错0308010C:digital envelope routines::unsupported
  • (二)CSharp-索引器
  • 配合AI刷leetcode 实现1170
  • English Learning - L3 作业打卡 Lesson5 Day36 2023.6.9 周五
  • 前端框架笔记
  • 详细设计文档
  • Java011——Java数据类型转换(基本数据类型)
  • mybatis-plus用法(二)
  • SQL笔记-存储过程+循环
  • HNU-操作系统OS-作业1(4-9章)
  • springboot 精华
  • 我用ChatGPT写2023高考语文作文(三):新课标I卷
  • HTML 标签的学习
  • 计算耗时为微秒的方法(包含:时/分/秒/毫秒/微秒/纳秒)
  • 通过 Python 封装关键词搜索阿里巴巴商品api接口