一、为什么要学 WebSocket?

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

websocket 与 http 区别:

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

ajax 轮询与 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()

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

  1. 《HTML5与CSS3基础教程(第8版)》

    <HTML5与CSS3基础教程(第8版)> 基本信息 原书名:HTML and CSS:visual quickstart guide 作者: (美)Elizabeth Castro    ...

  2. HTML5与CSS3基础教程(第7版) 高清PDF扫描版​

    HTML5与CSS3基础教程(第7版)试读不仅介绍了文本.图像.链接.列表.表格.表单.多媒体等网页元素,也介绍了如何为网页设计结构.布局,添加动态效果.格式化等形式,此外还涉及调试和发布.聚合和吸引 ...

  3. HTML5与CSS3基础教程(第8版) PDF扫描版​

    <HTML5与CSS3基础教程(第8版)>自第1版至今,一直是讲解HTML和CSS入门知识的经典畅销书,全面系统地阐述HTML5和CSS3基础知识以及实际运用技术,通过大量实例深入浅出地分 ...

  4. 【02】HTML5与CSS3基础教程(第8版)(全)

    [02]HTML5与CSS3基础教程(第8版)(全)   共392页.   (魔芋:大体上扫了一遍.没有什么新东西,都是入门的一些基础知识.) 已看完.       [美]elizabeth cast ...

  5. HTML5和CSS3基础教程(第8版)-读书笔记

    第1章 网页的构造块 一个网页主要包括以下三个部分: n        文本内容(text content):在页面上让访问者了解页面内容的纯文字. n        对其他文件的引用(referen ...

  6. HTML5与CSS3基础教程第八版学习笔记11~15章

    第十一章,用CSS进行布局 开始布局注意事项 1.内容与显示分离 2.布局方法:固定宽度和响应式布局 固定宽度,整个页面和每一栏都有基于像素的宽度 响应式布局也称为流式页面,使用百分数定义宽度 3.浏 ...

  7. HTML5和CSS3基础教程(第8版)-读书笔记(3)

    第11章 用CSS 进行布局 网站设计主要有两大类型:固定宽度和响应式. 对于固定(fixed)布局,整个页面和每一栏都有基于像素的宽度.顾名思义,无论是使用移动电话和平板电脑等较小的设备查看页面,还 ...

  8. HTML5和CSS3基础教程(第8版)-读书笔记(2)

    第7章 CSS构造模块 7.1 构造样式规则 样式表中包含了定义网页外观的规则.样式表中的每条规则都有两个主要部分:选 择 器(selector) 和 声 明 块(declaration block) ...

  9. HTML5与CSS3基础教程第八版学习笔记16-21章

    第十六章,表单 HTML5引入了新的表单元素.输入类型和属性,以及内置的对必填字段.电子邮件地址.URL以及定制模式验证. 元素: <input type="email"&g ...

随机推荐

  1. python之tuple元组,基础篇

    元组:它是一个序列,跟列表一样,里面存放多个元素 特点:1.有序的2.每个元素不可以被更改,不可以增加,不可以删除3.元组每个元素可以是任何数据类型1,定义一个非空元组 name_tuple = (& ...

  2. yolov5 AssertionError: Image Not Found解决方案

    运行yolov5 train.py报错:AssertionError: Image Not Found ../data/images/xxx.png 运行环境     一开始在笔记本上用显卡跑训练是可 ...

  3. css文字动画(自动换文字)

    html: <div class="content"> <div class="content__container"> <p c ...

  4. Mybatis学习(3)实现数据的增删改查

    前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml  的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.I ...

  5. redis广播/订阅模式演示

    参考博客 http://www.pianshen.com/article/7183315879/ 1.首先在本地启动redis服务 2.启动4个客户端 redis-cli 3.将其中三个客户端设置监听 ...

  6. 各种电子书、pdf

    剑指offer第二版:  链接:https://pan.baidu.com/s/1ABn3p9wY_kiQUzDRefZUqA  提取码:d30v 网络是怎样连接的:  链接:https://pan. ...

  7. 剑指offer 1-5

    二维数组中的查找 题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中 ...

  8. 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

    摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...

  9. angular小记

    declarations:包装组件或指令等 providers:依赖注入 imports:导入其他模块 bootstrap:设置根组件 exports:导出组件或指令等 app.component.t ...

  10. 测试基础(四)Jmeter基础使用

    前言 通过测试基础(三) Jmeter安装 - 大风北吹 - 博客园 (cnblogs.com)安装完成Jmeter后,就可以使用Jmeter进行性能测试. 一.线程组 (1).线程组分类 Jmete ...