Node.js创建一个简单的WebSocket接口,实现通信交互

news2024/11/17 7:55:15

Node.js创建一个简单的WebSocket接口,实现通信交互

一、为什么使用WebSocket?

WebSocket,最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
WebSocket 是一种在 TCP 连接上进行全双工通信的 API 技术。相比于传统的 HTTP 类型 API,WebSocket 类型接口有着更低的延迟和更高的效率,它适用于需要长时间保持连接并实时传输数据的场景,例如在线游戏、实时聊天等服务。
WebSocket是一种基于HTTP的长链接技术。传统的HTTP协议是一种请求-响应模型,如果浏览器不发送请求,那么服务器无法主动给浏览器推送数据。如果需要定期给浏览器推送数据,例如股票行情,或者不定期给浏览器推送数据,例如在线聊天,基于HTTP协议实现这类需求,只能依靠浏览器的JavaScript定时轮询,效率很低且实时性不高。
WebSocket特点:
在实现数据推送时,多数都是ajax轮询(在特定的时间间隔,由浏览器主动发起请求,会占用很多带宽和服务器资源)。而WebSocket建立TCP连接后,服务器可以主动给客户端传递数据,能够更好的节省服务器资源和带宽,实现更实时的数据通讯。
因为WebSockets只能通过连接发送纯文本数据和二进制数据,所以对于复杂的数据结构,在通过连接发送之前,必须进行JSON.stringify()序列化。
协议标识符是ws(加密则为wss),服务器网址就是 URL。如“ws://localhost:8080"。

二、示例代码

简单的WebSocket接口

ws 是一个简单易用、速度极快且经过全面测试的 WebSocket 客户端和服务器实现。

npm install ws
const http = require("http");
const WebSocket = require("ws");
const server = http.createServer();
// const WebSocketServer = WebSocket.WebSocketServer;
const socket = new WebSocket.Server({ server });

socket.on("connection", (scoket) => {
  console.log("连接已打开");
  scoket.on("message", (msg) => {
    console.log("收到消息==》" + msg);
    scoket.send("返回==》" + msg);
  });
  scoket.on("close", (msg) => {
    console.log("WebSocket连接已关闭", msg);
  });
});

server.listen(3000, () => {
  console.log("server start succeed http://127.0.0.1:3000");
});

三、测试接口连接通信效果

websocket在线测试网站
无论是内网还是外网都可使用,只是进行简单的测试连接。
新版本的Apifox同样可用于测试websocket接口
WebSocket 接口
测试示例
参考内容:
MDN WebSocket 接口API参考
js中的WebSocket
WebSocket 教程 - 阮一峰的网络日志

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

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

相关文章

Paper Reading: (U2PL) 基于不可靠伪标签的半监督语义分割

目录 简介目标/动机方法Pseudo-LabelingUsing Unreliable Pseudo-Labels 补充知识InfoNCE LossOHEM 实验Comparison with Existing AlternativesAblationEffectiveness of Using Unreliable Pseudo-LabelsAlternative of Contrastive Learning 总结附录U2PL 与 negative learni…

Unity之OpenXR+XR Interaction Toolkit接入Meta Quest3

前言 随着备受期待的Meta Quest 3与今年10月10日发布,这款来自Meta的下一代VR游戏头戴设备承诺将彻底改变您的游戏方式。 Meta Quest 3,玩家只需轻松一触即可在虚拟现实和真实世界之间无缝切换,无需摘下头戴设备进行快速现实检查。 Meta Quest 3最引人注目的特点之一是其能…

大数据讲课笔记1.2 Linux用户操作

文章目录 零、学习目标一、导入新课二、新课讲解(一)用户账号管理1、用户与用户组文件2、用户账号管理工作 (二)用户操作1、切换用户(1)语法格式(2)切换到普通用户(3&…

Axure元件库的使用

1.基本元件库 1.1Axure的画布范围 Axure是一个绘制项目原型图的软件,它里面的基本原件有: 1.1元件的呈现范围 首先我们要了解基本元件的作用范围在哪里? 浏览效果: 可以看出当我们的基本元件放在画布区域内是可以完全呈现出来…

智能安全用电监控管理系统

智能用电安全监控管理系统是一种基于物联网技术和大数据分析的智能化管理系统,用于监控和管理电力设备的安全运行。该系统依托电力智慧运维工具-电易云,可以实时监测电力设备的运行状态、电力负荷、用电行为等信息,通过智能算法识别设备的异常…

图像截屏公式识别——LaTeX-OCR安装与使用

一、简介 LaTeX-OCR 是一个开源的光学字符识别(OCR)软件,专为 LaTeX 文档提供支持。其主要目的是帮助用户将扫描的文档转换为 LaTeX 编辑器可以使用的可编辑文本,从而方便进行修改、编辑和排版。LaTeX广泛用于科技、数学、工程等…

leetcode--3. 无重复字符的最长子串[滑动窗口\哈希表 c++]

原题 : 3. 无重复字符的最长子串 - 力扣(LeetCode) 题目解析: 最长子串可以用滑动窗口解决,无重复字符可以使用哈希表解决。 算法原理: 滑动窗口哈希表 哈希表作为一个数组存放每个字符出现的次数。 …

串口通信(4)-C#串口通信入门实例

本文通过实例讲解C#串口通信。 入门实例设计一个串口助手,能够很好的涵盖串口要点的使用。 目录 一、成品图 二、界面文件 三、后台代码 四、实例中要点 一、成品图 如下: 实现的过程 创建winform项目,将Form1文件的名称改为MainForm&…

【LeetCode刷题】-- 171.EXcel表列序号

171.EXcel表列序号 方法:进制转换 class Solution {public int titleToNumber(String columnTitle) {//进制转换int number 0;int mul 1;for(int i columnTitle.length()-1;i>0;i--){int k columnTitle.charAt(i) - A 1;number mul * k;mul * 26;}return …

1+X大数据平台运维职业技能等级证书中级

该部分是选择题部分,实操题在主页的另一篇文章 考试名称:“1X”大数据平台运维职业技能等级证书(中级) 1X 大数据平台运维中级测试题一、单选题 以下哪种情况容易引发 HDFS 负载不均问题?( C&#xff09…

解决高风险代码:Unreleased Resource: Streams

Abstract 程序可能无法成功释放某一项系统资源。 Explanation 程序可能无法成功释放某一项系统资源。 资源泄露至少有两种常见的原因: - 错误状况及其他异常情况。 - 未明确程序的哪一部份负责释放资源。 大部分 Unreleased Resource 问题只…

定制软件开发的 5 个挑战

对于大公司来说,定制软件开发就像是眼中钉。无论您是要创建内部使用的工具、自动化手动流程还是推出新产品,从头开始构建它历来都是昂贵且危险的。花钱购买领先的现成解决方案之一,却不得不花费更多的时间和金钱对其进行定制来完成工作&#…

Vue 工作开发小技巧

一、汇总 ​ 本博客&#xff0c;记录了一些Vue在日常开发工作中比较实用的小技巧&#xff0c;后续会陆续添加更新。 ​ 1、利用Sass的:global定义全局样式。 ​ 2、在<style>内部使用v-bind给CSS属性绑定属性值。 ​ 3、父子组件传值时&#xff0c;使用.sync修饰符后…

【抄作业】ubuntu完全卸载CUDA,彻底卸载cuda,卸载不同版本的cuda,cuda不同版本的卸载方法

卸载的实现方法 如何正确、完全的卸载cuda呢&#xff1f; 其实cuda安装时就已经准备好了卸载的接口&#xff0c;卸载程序在/usr/local/cuda-xx.x/bin下&#xff0c;需要注意的是cuda10.0及之前的版本卸载程序名为uninstall_cuda_xx.x.pl&#xff0c;而cuda10.1及之后的版本卸…

leetcode 69. x 的平方根(优质解法)

代码&#xff1a; class Solution {public int mySqrt(int x) {long left0;long rightx;while (left<right){long midleft(right-left1)/2;//注意乘法操作和加法操作都很容易发生溢出if(mid*mid<x){leftmid;}else {rightmid-1;}}return (int)left;} } 题解&#xff1a;…

MES系统物料计划协同:全面解析与应用

一、MES系统物料计划协同概述 MES系统物料计划协同是指通过MES系统对物料计划进行统一管理和协调&#xff0c;确保生产计划的顺利进行。通过将物料需求、采购、库存、生产和配送等环节进行有效集成&#xff0c;实现供应链的优化。这种协同方式有助于提高供应链的透明度和协同性…

[OpenWrt]RAX3000一根线实现上网和看IPTV

背景&#xff1a; 1.我家电信宽带IPTV 2.入户光猫&#xff0c;桥接模式 3.光猫划分vlan&#xff0c;将上网信号IPTV信号&#xff0c;通过lan口&#xff08;问客服要光猫超级管理员密码&#xff0c;具体教程需要自行查阅&#xff0c;关键是要设置iptv在客户侧的vlan id&#…

【抄作业】ImportError :cannot import name xxxxxx ,原博主Activewaste

前情介绍 网上关于这种问题的解决方案一大堆&#xff0c;但是绝大多数都是不适用&#xff0c;或者说解决不了问题&#xff0c;我根据别人所遇到的和我自己遇到的&#xff0c;对这个问题整理了一下&#xff0c;希望能解决这个问题。 问题分析 一、缺少这个module或者func或者p…

java springboot+jsoup写一段爬虫脚本 将指定地址的 图片链接 文本 超链接地址存入自己的属性类对象中

首先 还是最基本的 要在 pom.xml 引入依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.14.1</version> </dependency>然后 我们可以在项目中创建一个属性类 我这里就叫 WebContent了…

ArkTS组件通信

父子通信 情况一&#xff1a;子组件只展示父组件中的状态 父组件通过 State修饰符 定义变量&#xff0c;子组件通过 Prop修饰符 获取变量。 Prop是 「单向传递」&#xff0c;父组件将变量「拷贝」一份交给子组件使用&#xff0c;子组件不可修改变量。 父组件 // 声明变量 …