HTML5(十一)——WebSocket 基础教程

2023-11-16

一、为什么要学 WebSocket?

websocket 是 HTML5 提供的一种长链接双向通讯协议,使得客户端和服务器之间的数据交换更简单,允许服务端主动向客户端推送数据,并且客户端与服务端只需连接一次,就可以保持长久连接,并进行数据通信。

websocket 与 http 区别:

  • http 链接分为长链接、短链接,短链接是发送一个请求,返回一个响应,长链接是在一定周期内保持链接。但是 websocket 只需连接一次就可以保持长链接,不需要的时候可以手动断开。
  • http 通信中,客户端是主动的,服务端是被动的。但是 websocket,服务端可以主动向客户端推送数据。
  • http 通过轮询建立的长链接,多次建立 request / response 会产生冗余的头部信息。

ajax 轮询与 websocket 通信原理如图:

HTML5(十一)——WebSocket 基础教程

websocket 就是为了解决客户端发起多个 http 请求到服务器资源,浏览器必须要经过长时间的,轮询问题而生的,实现多路复用。它最大特点就是服务器可以主动向客户端推送信息。

二、WebSocket 对象

2.1、创建对象:

let ws = new WebSocket( url , [ protocol ] )

url:指定连接的后台服务地址。

protocol:指定可接受的子协议,是可选参数。

2.2、对象属性

readyState:表示连接状态,是一个只读属性。

使用语法:ws.readyState

返回的值有4个,分别表示的意义:

  • 0 - 未建立连接
  • 1 - 已建立连接,可正常通信
  • 2 - 连接正在进行关闭
  • 3 - 连接已经关闭或断开,无法通信

bufferedAmount:已被放入等待传输队列,但是还没有发出的 UTF-8 文本字节数,也是只读属性。

2.3、对象事件

onopen - 连接时触发,用于指定连接成功后的回调函数。

使用语法:

// 方法一 :只可以指定一个回调函数
ws.onopen = function(){

}
//方法二 :可以指定多个回调函数
ws.addEventListener('open',function(){

})

onclose - 关闭时触发,指定连接关闭时回调函数。

使用语法:与 onopen 完全一致。

onmessage - 客户端接收服务端数据时触发,指定回调函数。

使用语法:

// 方法一:
ws.inmessage = function(event){
	let data = event.data
  //服务器传给客户端的数据
}
// 方法二:
ws.addEventListener('inmessage', function(event){
	let data = event.data
  //服务器传给客户端的数据
})

onerror - 通信发生错误时触发,并指定回调函数。

使用语法:

//方法一
ws.onerror = function(){
//错误处理
}
//方法二
ws.addEventListener('error',function(){
//错误处理
})

2.3、对象事件

send - 用于向服务器发送数据。

使用语法:

ws.send( data )

data :是发给服务器的数据,这个数据可以是字符串、数组、json、Blob 对象或 ArrayBuffer 对象等。

如发送 Blob 对象例子:

var file = document.querySelector('input='file'').files[0]
ws.send(file)

close - 关闭连接

使用语法:

ws.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5(十一)——WebSocket 基础教程 的相关文章

随机推荐

  • Java计算当天剩余秒、当月剩余天

    日常开发中会遇到关于日期的计算比如 当天剩余的秒数 当月的天数 当月剩余天数等等 实现思路 获取当天剩余的秒数 获取当月的天数 获取当天是是这个月的第几天 计算两个时间的差值 代码如下 LocalDateTime midnight Loca
  • ubuntu安装ElasticSearch-head插件

    插件安装 1 下载插件 默认你已经安装git git clone https github com mobz elasticsearch head git 2 检查是否安装node node v 如果没有安装 先安装python sudo
  • 0.43 版本frp 穿透后 404,内网访问正常

    解决办法 把 frps ini 中 common 块中加的 vhost http port 6001 删除就好 nginx 配置 6001 端口 然后 frpc ini 配置如下 web type http local ip 127 0 0
  • ConcurrentHashMap原理,jdk7和jdk8版本的区别

    jdk7 分段锁 数据结构 ReentrantLock Segment HashEntry 一个Segment中包含一个HashEntry数组 每个 HashEntry又是一个链表结构 元素查询 二次hash 第一次Hash定位到Segme
  • 记录一次优化运行时间的经验,QTableWidget竟有这么大的坑

    前两天接到一个任务 一个VS2015 qt5 osgEarth实现的项目 在向osgEarth场景中添加卫星时 用时过长 首先看一下代码逻辑 点击 添加 按钮并选择要添加的卫星后 我选择了七百多颗卫星 先将卫星相关参数添加到QTableWi
  • JS document.write()换行

    一开始想到的是用 n 未能达到换行效果 通过多个参数实现换行效果 通过传递多个参数 即可实现换行效果 document write br ar 效果 示例源码
  • Qt实战 信号槽有哪些连接方式?

    相信大多数面试过Qt的同学都会被问的问题 是的 因为在Qt的世界中 这简直太太太基础啦 而你只知道Qt AutoConnection 从未关心过其他连接方式 如果被我说中了 那就耐心看完吧 Qt AutoConnection 自动连接 这是
  • 七大排序算法

    目录 直接插入排序 希尔排序 直接选择排序 堆排序 冒泡排序 快速排序 快速排序优化 非递归实现快速排序 归并排序 非递归的归并排序 排序 所谓排序 就是使一串记录 按照其中的某个或某些关键字的大小 递增或递减的排列起来的操作 常见的排序算
  • redis基础4——RDB持久化、AOF持久化全面深入解读

    文章目录 一 redis持久化机制 1 1 持久化的背景 1 2 两种持久化概念 1 2 1 快照方式 RDB 1 2 2 文件追加方式 AOF 1 3 rdb持久化 Redis Database 1 3 1 快照原理 1 3 2 触发机制
  • 组合聚合的概念

    聚合的概念 聚合 Aggregation 关系是关联关系的一种 是强的关联关系 聚合是整体和个体之间的关系 例如 汽车类与引擎类 轮胎类 以及其它的零件类之间的关系便整体和个体的关系 聚合关系也是通过实例变量实现的 在聚合关系中 两个类是处
  • shell脚本中遇到错误时中断程序运行,不再执行后面的程序

    shell脚本中遇到错误时中断程序运行 不再执行后面的程序 当你在脚本中写了一连串的代码时 如果后面的代码需要前面代码执行正确才能继续执行时 你可以使用set e vim test sh新建一个脚本文件 bin bash 设置程序出错时不再
  • 【软件工程】静态测试与动态测试

    静态测试 桌前检查 代码走查 代码审查 动态测试 黑盒测试 等价类划分 确定无效与有效等价类 设计用例尽可能多的覆盖有效类 设计用例只覆盖一个无效类 边界值分析 处理边界情况时最容易出错 选取的测试数据应该恰等于 稍小于或稍大于边界值 错误
  • python爬虫返回百度安全验证

    我一开始用的是requests库 header加了accept和user agent 这是一开始的代码 import requests headers Accept text html application xhtml xml appli
  • SpringBoot项目使用EasyPoi实现导入导出,就是这么的丝滑

    在项目的开发工程中 经常有导入导出数据的常见功能场景 Apache的POI是处理导入导出中最常用的 但是其原生的用法太复杂 很繁琐 总是在Copy 无意间发现一款简单粗暴的神器EasyPoi EasyPoi也是基于POI的 在SpringB
  • 使用vpd进行行级控制

    在系统用户下 1 创建vpd用户 create user vpd identified by 123456 grant resource connect to vpd grant execute on dbms rls to vpd gra
  • 高德地图, 动态绘制多个marker 并 随着地图缩放, 判定marker之间的距离, 显示不同 marker 效果

    转载
  • JVM系统线程

    虚拟机线程 这种线程的操作时需要JVM达到安全点才会出现 这些操作必须在不同的线程中发生的原因是他们都需要JVM达到安全点 这样堆才不会变化 这种线程的执行类型包括 stop the world 的垃圾收集 线程栈收集 线程挂起以及偏向撤销
  • MFC Windows程序设计1_3

    使用VS2008生成MFC程序 选择对话框形式 主要的需要注意的 在App类中 重写InitInstance 函数 MyDlg dlg m pWindow dlg dlg doModal return FALSE 注意InitInstanc
  • 读书有感:《失业的程序员》

    失业的程序员 是我在三天前心血来潮找来的一本书 这是一本极其易读 风趣横生的关于程序员从失业到创业的小说类书籍 书中主人公从一开始辞职失业 到整合资源开始创业 再到最后看似创业已经稳定却是艰难险阻 创业团队也从一开始的 2 人 到 10 多
  • HTML5(十一)——WebSocket 基础教程

    一 为什么要学 WebSocket websocket 是 HTML5 提供的一种长链接双向通讯协议 使得客户端和服务器之间的数据交换更简单 允许服务端主动向客户端推送数据 并且客户端与服务端只需连接一次 就可以保持长久连接 并进行数据通信