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

news2024/9/23 13:23:03

最近在开发中需要调用第三方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.value
            console.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>

在浏览器查看该连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# .Net 条码批量自动打印框架 基于Bartender 10.1 V1.0

调用Bartender打印模板&#xff0c;批量打印条码。 需要有一定的C#开发能力。 非常适合工厂中从ERP拿取信息后&#xff0c;批量打印出货条码。 提供全部源代码&#xff0c;毫无保留。 Winform程序&#xff0c;使用了依赖注入(微软DI)&#xff0c;数据库访问的ORM为Dapper。…

位图 —— 哈希思想的产物

目录 1.学习位图的前置知识 计算机中数据存储的单位 C中数据类型的大小 2.位图的讲解 位图的引出 位图的使用 位图的实现 位图完整代码 3.位图的总结 位图的优缺点 优点 缺点 1.学习位图的前置知识 计算机中数据存储的单位 想要学习位图&#xff0c;首先要明白什…

在Windows10系统快速启用telnet功能

打开Windows控制面板 → 程序 → 启用或关闭Windows功能 勾选Telnet客户端 然后确定 启用后windowR 打开运行&#xff0c;输入cmd回车 使用telnet命令回车 可以直接使用telnet命令&#xff08;如果提示telnet是外部命令需要重启电脑&#xff09; 输入 ?/help 可查看帮助 到…

排序算法:

冒泡排序&#xff1a; 从列表的第一个数字开始进行比较&#xff0c;判断该数和下一个数之间的大小关系&#xff0c;如果该数比右边的数大&#xff0c;则交换位置&#xff1b;否则不变。一般一轮可以确定最大的数字&#xff0c;在列表的最后一位。 代码&#xff1a; 注意&…

开源 AI 智能名片 S2B2C 商城小程序在现代商业中的创新与启示

摘要&#xff1a;本文通过分析一种以 9.9 元裙子为代表的独特商业模式&#xff0c;探讨了其背后的现金流、产品和渠道组合策略&#xff0c;以及开源 AI 智能名片 S2B2C 商城小程序在其中可能发挥的作用和带来的启示。 一、引言 在当今竞争激烈的商业环境中&#xff0c;企业不断…

Redis数据结构与连接

1 基本的数据结构 1.1 string string的实现有多种 int&#xff1a;字符串长度小于等于20且能转成整数raw&#xff1a;字符串长度大于44embstr&#xff1a;字符串长度小于等于44 字符串长度小于1M 时&#xff0c;加倍扩容&#xff1b;超过 1M 每次只多扩1M&#xff1b;字符串…

【如何在Mac电脑和示波器之间共享文件】

如何在Mac电脑和示波器&#xff08;Tektronix OSC&#xff09;之间共享文件 Tektronix Lan&#xff1a; Mac Lan&#xff1a; 按下Utility,開始設定&#xff1b; 按下Utility Page,選至I/O&#xff1b; Network Configuration選至Manual,再Set IP Adresses Manually&am…

tailwindcss

什么是Tailwind CSS Tailwind CSS 是一个可定制化的 CSS 框架&#xff0c;最大的特点是功能类优先&#xff0c;和我们知道的bootstrap&#xff0c;element ui&#xff0c;antd&#xff0c;veui等框架一样。将一些CSS样式封装好&#xff0c;用来加速我们开发的一个工具。 简单…

精选算法编程题

一、有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10]输出&#xff1a;[0,1,9,16,100]解释&#xff1a;平方后&am…

JAVAEE初阶第二节——多线程基础(中)

系列文章目录 JAVAEE初阶第二节——多线程基础(中) 多线程基础(中) 多线程带来的的风险-线程安全 (重点)synchronized 关键字volatile 关键字wait 和 notify 文章目录 系列文章目录JAVAEE初阶第二节——多线程基础(中) 多线程基础(中)一.多线程带来的的风险-线程安全 (重点)1…

CSDN字体、颜色设置

目录标题 一、字体设置二、字体颜色设置 一、字体设置 设置文字字体的基本语法如下&#xff1a; <font face"字体名称">显示内容</font>在字体名称部分写入字体的名称&#xff0c;比如常见的&#xff1a;宋体、微软雅黑、黑体、华文行楷、方正姚体、楷…

C++奇迹之旅:深度解析list的模拟实现

文章目录 &#x1f4dd;前言&#x1f320;list节点&#x1f309;list &#x1f320;迭代器的创建&#x1f309;const迭代器 &#x1f320;代码&#x1f6a9;总结 &#x1f4dd;前言 &#x1f320;list节点 我们先建立一个列表里的节点类listnode&#xff0c;用来构造list的节…

【知识】对比Share mem/Pin mem/GPU mem之间的传输速度

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 参考代码 运行结果 参考代码 import torch import time import matplotlib.pyplot as plt# 初始化设备和张量 device torch.device(cuda) dat…

float 或 double 运算的时候会有精度丢失的风险?

《阿里巴巴 Java 开发手册》中提到&#xff1a;“浮点数之间的等值判断&#xff0c;基本数据类型不能用 来比较&#xff0c;包装数据类型不能用 equals 来判断”。“为了避免精度丢失&#xff0c;可以使用 BigDecimal 来进行浮点数的运算”。 浮点数的运算竟然还会有精度丢失…

当AI遇上制药:加速跑向未来的快车道,还是布满荆棘的征途?

01 在全球科技领域&#xff0c;AI的崛起无疑掀起了一场变革的风暴&#xff0c;其影响力已渗透至各行各业&#xff0c;促使各领域积极寻求与AI技术的深度融合&#xff0c;以提升效率、创新产品及优化服务。在医疗健康领域&#xff0c;AI与制药的结合自2007年起航&#xff0c;历…

Servlet 简介+ Cookie和session+过滤器Filter和监听器Listener

目录 1.Servlet 介绍 1.1 什么是Servlet 1.2 Servlet的使用方法 1.3 Servlet接口的继承结构 2.Servlet的生命周期 2.1 servlet生命周期中重要的方法 3.获得前端提交数据 4.中文乱码的解决方案 5.重定向和转发 5.1 重定向 5.2 转发 6. Request对象 7. Response对象…

(南京观海微电子)——半导体制程介绍

半导体的制程&#xff1a; 1. IC 设计&#xff1a; 预先规划芯片的功能&#xff0c;功能包含算术逻辑、记忆功能、 浮点运算、 数据传输&#xff0c;各功能分布在芯片上各区域&#xff0c;并制作所需的电子元件&#xff0c;工程师使用&#xff08;HDL&#xff09;设计电路图&…

opencv之几何变换

文章目录 1 前言2 线性几何变换的主要类型2.1 平移 (Translation)&#xff1a;2.1.1 定义2.1.2代码 2.2 缩放 (Scaling)&#xff1a;2.2.1 定义2.2.2 代码 2.3 旋转 (Rotation)&#xff1a;2.3.1 定义2.3.2 代码 2.4 仿射变换 (Affine Transformation)&#xff1a;2.4.1 定义2.…

Git:版本控制的强大工具与全面解析

Git&#xff0c;作为现代软件开发中不可或缺的版本控制工具&#xff0c;凭借其高效、灵活和分布式的特性&#xff0c;赢得了全球开发者的青睐。无论是个人项目还是大型企业级应用&#xff0c;Git 都能够提供强大的版本管理、分支策略、远程协作等功能。本文将从Git的创建与初始…

【电子数据取证】Android APK静态分析与动态分析

文章关键词&#xff1a;电子数据取证、手机取证、安卓取证、云取证、APK分析 当前手机用户量增长越来越快&#xff0c;尤其是中国&#xff0c;手机用户量已超10亿&#xff0c;即大约75%的中国人拥有自己的手机。正因为手机越来越智能化&#xff0c;携带也方便&#xff0c;因此…