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

【网络协议】WebSocket知识点梳理和总结

1. 前言

        HTML5提出了全双工通讯协议WebSocket,让客户端和服务端交换数据更加便利。本篇梳理和总结一下WebSocket的方法和属性,并给一个示例代码。

2.WebSocket原型的方法和属性

        Websocket继承于EventTarget,WebSocket原型对象的方法和属性如下:

方法和属性说明
new WebScoket(url, protocols?)

功能:创建WebSocket实例

输入:

url 要连接URL

protocols? 一个协议字符串或一个包含协议字符串的数组,用于指定子协议,不指定则为空字符串''

WebSocket.prototype.send(data)

功能:对要传输的数据进行排队

输入:string | Blob | ArrayBuffer

WebSocket.prototype.close(code?,reason?)

功能:关闭当前连接

WebSocket.prototype.onopen = handler

功能:连接建立成功后触发的open事件

WebSocket.prototype.onmessage

= function(event) { ... }

功能:客户端接收服务器数据时触发的message事件

注:event.data返回的数据类型 string | Blob | ArrayBuffer

WebSocket.prototype.onerror

= function(event) { ... }

功能:连接失败后触发的error事件

注:event有3个额外属性

wasClean 连接是否干净地关闭

code 来自服务器数据状态码

reason 字符串,包含服务器发来的消息

WebSocket.prototype.onclose = handler

功能:连接关闭后触发的close事件

WebSocket.prototype.url

功能:返回创建WebSocket实例对象时URL的绝对路径(只读)

输出:DOMString

WebSocket.prototype.protocol

功能:返回服务端选中的子协议名字,是创建WebSocket实例对时protocols指定的字符串(只读)

WebSocket.prototype.extensions

功能:返回服务器已选择的扩展值(只读)

输出:DOMString

WebSocket.prototype.binaryType

功能:返回连接所传输的二进制数据类型

输出:DOMString('blob' | 'arraybuffer')

WebSocket.prototype.bufferedAmount

功能:返回已被send()放入队列中等待传输,但还未发出UTF-8字节数(只读)

输出:number

WebSocket.prototype.readyState

功能:返回连接状态

输出:CONNECTING | OPEN | CLOSING | CLOSING

静态常量

WebSocket.prototype.CONNECTING 0 - 正在连接

WebSocket.prototype.OPEN               1 - 连接已打开

WebSocket.prototype.CLOSING         2  - 连接正关闭

WebSocket.prototype.CLOSED          3 - 连接已关闭

3. 示例代码
// 创建WebSocket连接
const ws = new WebSocket('ws://localhost:8080/echo');

// 链接建立成功
ws.onopen = () => {
    // 向服务端发送数据
    ws.send('Hello World!');
}

// 监听服务端发过来的数据
ws.onmessage = (event) => {
    console.dir(event.data);
}

// 连接出错触发error事件
ws.onerror = () => {
    console.log('连接出错');
}

// 服务端关闭WebSocket连接或ws.close()主动关闭连接触发close事件
ws.onclose = () => {
    console.log('链接已关闭');
}

        本篇给出的示例代码比较简单,产品化使用时,还需要考虑连接断开后的重连、心跳等等,网上已有很多封装好的库可以使用。

注:以上,如有不合理之处,还请帮忙指出,大家一起交流学习~  

相关文章:

  • 网站显示不安全警告怎么办?消除网站不安全警告超全指南
  • test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking
  • 浅谈C语言inline关键字
  • Redisson依赖冲突记录
  • 继续声明 | 连声明都抄,谁抄袭谁,一目了然,现在竟然恬不知耻的反咬一口。
  • Polars基本操作-Lazy API
  • 在使用tcp长连接时,是否还需要再引入重发机制?
  • node使用nodemonjs自动启动项目
  • 第22课 类和对象
  • 浅谈数字孪生的应用与发展
  • 苹果账号被禁用怎么办?
  • 2023十大编程语言及未来展望
  • 大模型LLM的微调技术:LoRA
  • 软件测试面试题——如果保证测试用例覆盖率
  • cpp_07_类型转换构造_析构函数_深拷贝_静态成员
  • lodash源码分析每日一练 - 数组 - intersection / intersectionBy / intersectionWith
  • mp4视频转rosbag文件(图片压缩格式)
  • Flink导入StarRocks
  • 【音视频 ffmpeg 学习】 跑示例程序 持续更新中
  • Python圣诞树代码
  • 4年间职务侵占、受贿逾亿元,北京高院:严惩民企内部腐败
  • 无人机企业从科技园区搬到乡村后,村子里变得不一样了
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开无条件谈判
  • 15年全程免费,内蒙古准格尔旗实现幼儿园到高中0学费
  • 新城市志|GDP万亿城市,一季度如何挑大梁
  • 工人日报:应对“职场肥胖”,健康与减重同受关注