前端开发——熟悉WebSocket(包含示例)

2024-08-29 06:28

本文主要是介绍前端开发——熟悉WebSocket(包含示例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在开发中需要调用第三方API,现在大家的API基本上都是使用WebSocket来进行的,前端也必须来学一手了

什么是WebSocket

参考:https://blog.csdn.net/L2043524156/article/details/139271715

有如下四个好处:

双向通信:既可以是客户端向服务端发起请求,也可以是服务端向客户端发起请求

持久链接:在没有执行断开链接操作,websocket连接会一直保持,不必重复请求连接

低延迟:其实是第二点带来的好处

轻量级:暂时没找到权威的答案,一说为:WebSocket 协议的数据头部相对较小

WebSocket的工作流程

1.首先需要一个node框架开启一个webSocket服务,得到一个webSocket地址

2.前端通过该地址创建WebSocket实例,向服务端发起请求建立连接

3.连接建立过程中双方可以发送消息,通过类似于生命周期钩子的回调函数处理各种事件

4.通过显式调用close方法或者刷新和关闭网页来关闭WebSocket连接

代码实例

后台服务

// websocket.js
const WebSocket = require("ws");const PORT = 8080;
const wws = new WebSocket.Server({port: PORT,
});
let myKey = 1;
wws.on("connection", function connection(ws) {console.log("链接建立");// 发送初始消息ws.send("66666666666666666");// 受到新收到消息ws.on("message", function (msg) {const msgs = msg.toString("utf8");if (msgs === "key") {console.log("接收到指令,返回结果");ws.send(myKey);myKey += 1;} else {console.log("默认日志打印", msgs);}});ws.on("close", function bey() {console.log("再见!");});ws.on("error", function error(err) {console.error("WebSocket错误:", err);});
});console.log("websocket server running in localhost:" + PORT);// 服务端任务
/* 
1.(GET)搭建node端 WebSocket服务
2.(GET)服务端发送消息
3.(TODO)服务端错误处理
4.(TODO)服务端端开链接
*/

前端页面

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>WebSocket Test</title>
</head><body><div id="root"><input id="text" type="text"><input id="submit" type="submit" name=""></div><script>const submitBtn = document.getElementById('submit')const txt = document.getElementById('text')const socket = new WebSocket("ws://localhost:8080");// 添加消息监听功能// socket.addEventListener('message', function (msg) {//     console.log('受到服务器发送的消息:' + msg);// })socket.onopen = function () {console.log('链接成功');}socket.onerror = function (event, e) {console.log('链接失败' + event.data);}socket.onmessage = function (msg) {console.log('接收到消息' + msg.data);}socket.onclose = function () {console.log('链接关闭');}submitBtn.addEventListener('click', function () {const msg = txt.valueconsole.log('文本内容', msg);socket.send(msg)txt.value = ''})console.log('打印默认属性','\n连接所传输二进制数据的类型:', socket.binaryType,'\n已经被send()方法放入队列中但还没有被发送到网络中的数据的字节数', socket.bufferedAmount,'\n服务器已选择的扩展值', socket.extensions,'\n服务器端选中的子协议的名字', socket.protocol,'\n链接状态', socket.readyState,'\n构造函数创建WebSocket实例对象时URL的绝对路径', socket.url);</script>
</body></html>

在浏览器查看该连接

这篇关于前端开发——熟悉WebSocket(包含示例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117092

相关文章

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动