WebSoket的概述,API和使用
一、概念
1 Web Socket(套接字)的目标时通过一个长时连接实现语服务器全双工,双向的通信
2.在js中创建一个Web Socket时,会发送一个http请求到服务器以初始化连接。服务器响应之后,
连接使用http的upgrade头部从http协议切换到web socket协议。这意味着web socket不能通过
标准的http服务器实现,而必须使用支持该协议的专用服务器。
3.因为web socket使用自定义的协议,所有url方案稍有变化:不能使用http://或https://,
而要使用ws://和wss://。前者是不安全的连接,后者是安全连接。
4.使用自定义协议而非http协议的好处是,客户端和服务器端之间可以发送非常少的数据,不会
对http造成任何负担。使用更小的数据包让web socket非常适合带宽和延迟问题比较明显的移动
应用。
5.使用自定义协议的缺点是,定义协议的时间比定义js api要长
二、API
1.创建一个新的Web Socket,就要实例化WebSocket对象并传入提供连接的url
let socket= new WebSocket('ws://www.example.com/server.php');
2.readyState属性表示当前状态
WebSocket.OPENING:连接正在建立 ==》对应常量的值 0
WebSocket.OPEN:连接已经建立 ==》对应常量的值 1
WebSocket.ClOSING:连接正在关闭 ==》对应常量的值 2
WebSocket.ClOSE:连接已经关闭 ==》对应常量的值 3
3.WebSocket对象没有readystateChange事件,而是有与上述不同状态对应的其他事件
readyState值从0开始
4.任何时候都可以调用close()方法关闭 web socket连接,调用之后,readyState立即
变为2,并在关闭之后变为3
三、发送和接受数据
1.使用send方法向服务器发送数据,可传入字符串,ArrayBuffer或Blob
let socket= new WebSocket('ws://www.example.com/server.php');
let stringData='hello world';
let arrayBufferData = Uint8Array.from(['f','o','o']);
let blobData =new Blob(['f','o','o']); socket.send(stringData);
socket.send(arrayBufferData);
socket.send(blobData);
2.服务器向客户端发送消息时,WebSocket对象上会触发message事件。
这个message事件与其他消息协议类似,可以在event.data属性访问到有效载荷
socket.onmessage=function(event){
let data= event.data;
//对数据的操作,event.data和发送数据类似,
//为字符串,ArrayBuffer或Blob,
//取决于websocket对象的binaryType属性决定
}
四、其他事件
WebSocket对象在连接生命周期中可能触发3个其他事件。
open:在连接成功船舰时触发
error:在发生错误时触发,连接无法存续
close:在连接关闭时触发
let socket= new WebSocket('ws://www.example.com/server.php');
socket.onopen=function(){
alert('Connection established');
}
socket.onerror=function(){
alert('Connection error');
}
socket.onclose=function(){
alert('Connection closed');
}
这些事件中只有close事件的event对象上有额外信息。
这个对象上有三个属性
1. wasclean 布尔值,表示连接是否干净关闭
2. code 来自服务器的数值状态码;
3. reason 字符穿,包含了服务器发出的信息
socket.onclose=function(){
alert('Connection closed');
console.log(`as clean ? ${event.wasclean} Code= ${event.code}
Reason=${event.reason}
`);
}
WebSoket的概述,API和使用的更多相关文章
- Easticsearch概述(API使用)二
Rest简介 一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务端互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制 Rest的操作分为以 ...
- 阿里云API网关(1)服务网关的产品概述
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- API概述,使用步骤和Scanner概述及其API文档的使用
API概述 API(Application Programming Interface),应用程序编程接口.Java API是一本程序员的 字典 ,是JDK中提供给 我们使用的类的说明文档.这些类将底 ...
- JavaSE学习总结第11天_开发工具 & API常用对象1
11.01 常见开发工具介绍 1:操作系统自带的记事本软件 2:高级记事本软件例:Editplus,Notepad++,UltraEdit 3:集成开发环境 IDE(Integrated Deve ...
- 阿里云API网关(6)用户指南(开放 API )
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云API网关(4)快速入门(开放 API)
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- API简介
概述 API(Application Programming Interface),应用程序编程接口.Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档.这些类将底层的代码 ...
- websocket 2 rest api
需要开发一个prometheus 的exporter 使用jmespath 获取对应metrics的数据,并进行转换处理,但是因为那个服务 提供的接口是通过websoket 的实时api,所以基于no ...
- Java常用API、Math类介绍
一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...
- Java 之常用API(一)
常用API 1 API概述 2 Scanner类与String类 3 StringBuilder类 NO.one API概述 1.1 API概述 API(Application Programm ...
随机推荐
- Mimikatz 常用命令
以肉去蚁蚁愈多,以鱼驱蝇蝇愈至. 导航 1 工具介绍 2 基本用法 2.1 执行方式 2.2 帮助命令 3 模块用法 3.1 Standard 模块 3.2 Privilege 模块 3.3 Toke ...
- 如何在 .NET 中构建一个好用的动态查询生成器
前言 自从.NET Framework 3.5提供了LINQ之后,集合数据查询基本被LINQ统一了.这大幅提高了编写数据查询代码的效率和质量,但是在需要编写动态查询的时候反而很困难,特别是最常用的wh ...
- C语言基础算法
C语言基础算法 目录 C语言基础算法 1.阶乘 递归实现 循环实现 2.排序 冒泡排序 选择排序 3.斐波那契数列 4.ASCII码的使用 1.阶乘 递归实现 #include <stdio.h ...
- 深入剖析开源AI阅读器项目Saga Reader基于大模型的文本转换与富文本渲染优化方案
引言 AI阅读器作为一种新型的内容消费工具,正在改变人们获取和处理信息的方式.本文将介绍Saga Reader项目中如何利用大型语言模型(LLM)进行网页内容抓取.智能优化和富文本渲染,特别是如何通过 ...
- 初见threejs
threejs底层封装了强大的webGL技术,让开发者们可以开箱即用 (其实也并非开箱即用,还是挺麻烦的). 恰巧朋友遇到了些难题,借此契机,接触了下threejs. 官网是支持中文的,虽然翻译的很差 ...
- Luogu P11157 【MX-X6-T3】さよならワンダーランド 题解
P11157 [MX-X6-T3]さよならワンダーランド 神秘思维题. 考虑到转化式子,拆成 \(j\ge a_i\) 和 \(j\le a_{i+j}\).前一个不等式是容易满足的,我们只需要在 \ ...
- 前端开发系列044-基础篇之TypeScript语言特性(四)
本文主要对TypeScript中的函数进行展开介绍.主要包括以下内容 ❏ 函数的创建和类型 ❏ 函数参数情况说明 ❏ 泛型函数简单介绍 一.函数的创建和类型 函数的创建 函数的创建主要有两种方式:通过 ...
- 使用字符串创建java 对象
简介 RT code String s = "java.util.Random"; Object m = Class.forName(s).newInstance();
- Node.js躬行记(30)——SkyWalking使用和排查分析
公司使用了阿里云的服务,其中可以在项目中使用全链路监测,最近要排查慢响应,所以就在 Node 项目中接了一下 SkyWalking. 本文还会记录在使用时遇到的问题,以及解决思路. 一.初始化 1)参 ...
- centos7在服务器上的安装
CentOS 提供了多种安装版本,每种版本都有其特定的用途和适用场景.以下是 CentOS DVD.Everything.Minimal 和 NetInstall 四个版本的主要区别: 安装系统 1. ...