用JavaScript、Nodejs写一个本地tcp服务,用于前端WebSocket调试

效果:

准备工作:

新建一个文件夹,在根目录安装依赖:

npm install ws express

依赖介绍:

WS是一个轻量级、高效的WebSocket库,适用于Node.js环境。

express 是一个流行的Node.js Web应用程序框架。

新建server.js文件,和public文件夹,public下新建index.html:

server.js:

介绍:PORT为运行端口,看板地址为http://localhost: + PORT,连接地址为ws://localhost:+ PORT

const express = require('express');
const WebSocket = require('ws');
const app = express();
const PORT = 3000;// 创建 HTTP 服务
app.use(express.static(__dirname + '/public'));
const server = app.listen(PORT, () => {});// 创建 WebSocket 服务
const wss = new WebSocket.Server({ server });
let clients = [];wss.on('connection', (ws) => {clients.push(ws);console.log(`New client connected. Total clients: ${clients.length}`);// 监听客户端消息ws.on('message', (message) => {console.log(`Received message: ${message}`);try {const parsedMessage = JSON.parse(message);if (parsedMessage.command === "ping") {ws.send(JSON.stringify({ command: "pong", data: "pong response" }));}} catch (e) {// 若消息不是 JSON 格式的字符串,直接处理为普通消息ws.send(`Echo: ${message}`);}});// 当客户端断开连接时,从列表中移除并记录信息ws.on('close', () => {clients = clients.filter((client) => client !== ws);console.log(`Client disconnected. Total clients: ${clients.length}`);});
});// 定义推送消息的函数,广播给所有客户端
function broadcastMessage(message) {clients.forEach((client) => {if (client.readyState === WebSocket.OPEN) {client.send(message);}});
}// 定义 API 接口用于前端推送消息
app.use(express.json());
app.post('/send', (req, res) => {const message = req.body.message;// 广播消息给所有客户端broadcastMessage(message);res.json({ status: 'Message sent' });
});

index.html:

介绍:可以根据自己测试的需要改变sendMessage发送的格式

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>WebSocket Client</title><style>#messages {border: 1px solid #ccc;padding: 10px;height: 200px;overflow-y: auto;margin-bottom: 10px;}.message {margin: 5px 0;padding: 5px;}.sent {color: green;}.received {color: black;}.status {color: blue;}.item{font-size: 12px;margin: 10px 0 ;display: flex;align-items: center;}</style>
</head>
<body><div class="item">指令:<input type="text" id="command" placeholder="输入command" /></div><div  class="item">数据:<input type="text" id="data" placeholder="输入data" /></div><button onclick="sendMessage()">发送</button><div id="messages"></div><script>// WebSocket 连接const ws = new WebSocket("ws://localhost:3000");// 监听连接成功ws.onopen = () => {displayMessage("Connected to WebSocket server", 'status');};// 监听消息ws.onmessage = (event) => {const receivedData = event.data;displayMessage(receivedData, 'received');};// 发送消息function sendMessage() {const command = document.getElementById("command").value;const data = document.getElementById("data").value;if (command) {ws.send(JSON.stringify({command}));  // 发送消息到 WebSocket 服务器displayMessage(command, 'sent');  // 显示发送的消息// 通过 HTTP POST 向后端发送消息fetch('http://localhost:3000/send', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ message: JSON.stringify({command,data:data ?? {}}) })}).then(response => response.json()).then(data => console.log(data));}document.getElementById("message").value = "";  // 清空输入框}// 显示消息function displayMessage(message, type) {const messagesDiv = document.getElementById("messages");const newMessage = document.createElement("div");newMessage.className = `message ${type}`;newMessage.textContent = `${type === 'sent' ? '发送' : type === 'received' ? '接收' : '状态'}: ${message}`;messagesDiv.appendChild(newMessage);messagesDiv.scrollTop = messagesDiv.scrollHeight;}</script>
</body>
</html>

使用:

根目录执行命令:node server

表单用浏览器访问:http://localhost:3000/

接收端WebSocket连接地址ws://localhost:3000也可以改成IP

接收端WebSocket我写过Android和uniapp的,可以参考下列文章:

https://blog.csdn.net/m0_49083276/category_12433687.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12433687&sharerefer=PC&sharesource=m0_49083276&sharefrom=from_linkicon-default.png?t=O83Ahttps://blog.csdn.net/m0_49083276/category_12433687.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12433687&sharerefer=PC&sharesource=m0_49083276&sharefrom=from_link

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业常见的主数据管理挑战及解决方案

在当今高度数字化的商业环境中&#xff0c;数据已成为企业决策、运营和战略规划的核心。主数据管理&#xff08;MDM&#xff09;作为管理核心业务数据的一种方式&#xff0c;帮助企业确保其关键数据在整个组织中保持一致、准确和可信。然而&#xff0c;许多企业在实施主数据管理…

Python http打印(http打印body)flask demo(http调试demo、http demo、http printer)

文章目录 代码解释 代码 # flask_http_printer.pyfrom flask import Flask, request, jsonify import jsonapp Flask(__name__)app.route(/printinfo, methods[POST]) def print_info():# 分隔符separator "-" * 60# 获取请求头headers request.headers# 获取 JS…

从无音响Windows 端到 有音响macOS 端实时音频传输播放

以下是从 Windows 端到 macOS 端传输音频的优化方案&#xff0c;基于上述链接中的思路进行调整&#xff1a; Windows 端操作 安装必要软件 安装 Python&#xff08;确保版本兼容且已正确配置环境变量&#xff09;。安装 PyAudio 库&#xff0c;可通过 pip install pyaudio 命令…

用 Python 从零开始创建神经网络(二)

用 Python 从零开始创建神经网络&#xff08;二&#xff09; 引言1. Tensors, Arrays and Vectors&#xff1a;2. Dot Product and Vector Additiona. Dot Product &#xff08;点积&#xff09;b. Vector Addition &#xff08;向量加法&#xff09; 3. A Single Neuron with …

python爬虫自动库DrissionPage保存网页快照mhtml/pdf/全局截图/打印机另存pdf

目录 零一、保存网页快照的三种方法二、利用打印机保存pdf的方法 零 最近星球有人问如何使用页面打印功能&#xff0c;另存为pdf 一、保存网页快照的三种方法 解决方案已经放在星球内&#xff1a;https://articles.zsxq.com/id_55mr53xahr9a.html当然也可以看如下代码&…

现代Web开发:WebSocket 实时通信详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 现代Web开发&#xff1a;WebSocket 实时通信详解 现代Web开发&#xff1a;WebSocket 实时通信详解 现代Web开发&#xff1a;WebS…

Hadoop完全分布式环境搭建步骤

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 大数据与数据分析_夏天又到了的博客-CSDN博客 本文介绍Hadoop完全分布式环境搭建方法&#xff0c;这个Hadoop环境用于安装配置Spark。假设读者已经安装好Visual Box 7.0.6虚拟环境与一个CentOS 7虚拟机&#xff08;如果…

133.鸿蒙基础01

鸿蒙基础 1.自定义构建函数1. 构建函数-[Builder ](/Builder )2. 构建函数-传参传递(单向)3. 构建函数-传递参数(双向)4. 构建函数-传递参数练习5. 构建函数-[BuilderParam ](/BuilderParam ) 传递UI 2.组件状态共享1. 状态共享-父子单向2. 状态共享-父子双向3. 状态共享-后代组…

如何保证kafka生产者数据可靠性

ack参数的设置&#xff1a; 0&#xff1a;生产者发送过来的数据&#xff0c;不需要等数据落盘应答 假如发送了Hello 和 World两个信息&#xff0c;Leader直接挂掉&#xff0c;数据就会丢失 生产者 ---> Kafka集群 一放进去就跑 数据可靠性分析&#xff1a;丢数 1&#…

业务模块部署

一、部署前端 1.1 window部署 下载业务模块前端包。 &#xff08;此包为耐威迪公司发布&#xff0c;请联系耐威迪客服或售后获得&#xff09; 包名为&#xff1a;业务-xxxx-business &#xff08;注&#xff1a;xxxx为发布版本号&#xff09; 此文件部署位置为&#xff1a;……

后台管理系统窗体程序:文章管理 > 文章列表

目录 文章列表的的功能介绍&#xff1a; 1、进入页面 2、页面内的各种功能设计 &#xff08;1&#xff09;文章表格 &#xff08;2&#xff09;删除按钮 &#xff08;3&#xff09;编辑按钮 &#xff08;4&#xff09;发表文章按钮 &#xff08;5&#xff09;所有分类下拉框 &a…

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式 1、所要用到的激活工具2、开启电脑卓越性能模式Windows11Windows10在电源模式中选择卓越性能模式 3、将系统版本切换为 工作站版本 1、所要用到的激活工具 KMS激活工具(…

D62【python 接口自动化学习】- python基础之数据库

day62 SQL 基础 学习日期&#xff1a;20241108 学习目标&#xff1a;MySQL数据库-- 131 SQL基础和DDL 学习笔记&#xff1a; SQL的概述 SQL语言的分类 SQL的语法特征 DDL - 库管理 DDL - 表管理 总结 SQL是结构化查询语言&#xff0c;用于操作数据库&#xff0c;通用于绝大…

计算机图形学 实验二 三维模型读取与控制

目录 一、实验内容 二、具体内容 (在实验2.3的基础上进行修改) 1、OFF格式三维模型文件的读取 2、三维模型的旋转动画 3、键盘鼠标的交互 4、模型的修改 三、代码 一、实验内容 读取实验提供的off格式三维模型&#xff0c;并对其赋色。利用鼠标和键盘的交互&#xff0…

Redis 中 Bitmap 原理和应用

Bitmap Redis中的Bitmap&#xff08;位图&#xff09;是一种较为特殊数据类型&#xff0c;它以最小单位bit来存储数据&#xff0c;我们知道一个字节由 8个 bit 组成&#xff0c;和传统数据结构用字节存储相比&#xff0c;这使得它在处理大量二值状态&#xff08;true、false 或…

Springboot3.3.5 启动流程(源码分析)

一图搞懂 SpringBoot 启动流程&#xff08;清晰明了&#xff09;&#xff1a; createWebServer &#xff08;ServletWebApplicationContext&#xff09;流程 finishBeanFactoryInitialization&#xff08;ServletWebApplicationContext&#xff09;Bean装配流程 真正干活的&am…

CSS实现图片3D立体效果

概述 本文主要讲述如何通过 CSS 简单的设置就可以实现图片的 3D 立体效果。 3D 立体效果 当鼠标移入某一个图片上时,其余图片会像该图片倾斜。 具体实现 静图如下: 倒影效果图片会有一个倒影效果,其代码如下: <style>img {-webkit-box-reflect: below 1px linea…

java: 无法访问org.springframework.web.bind.annotation.RequestMapping

一、报错问题 java: 无法访问org.springframework.web.bind.annotation.RequestMapping 二、原因分析 SpringBoot使用了3.0或者3.0以上&#xff0c;因为Spring官方发布从Spring6以及SprinBoot3.0开始最低支持JDK17。所以仅需要将SpringBoot版本降低为3.0以下即可&#xff08;或…

Node.js:Express 服务 路由

Node.js&#xff1a;Express 服务 & 路由 创建服务处理请求req对象 静态资源托管托管多个资源挂载路径前缀 路由模块化 Express是Node.js上的一个第三方框架&#xff0c;可以快速开发一个web框架。本质是一个包&#xff0c;可以通过npm直接下载。 创建服务 Express创建一…

知识中台赋能法律咨询服务:八大核心优势

法律咨询服务领域&#xff0c;知识中台以其独特的功能和优势&#xff0c;为行业发展注入了新的活力。以下是知识中台在法律咨询服务中展现的八大核心优势&#xff1a; 一、法律知识资源的全面整合 知识中台致力于收集、整理和整合各类法律知识资源&#xff0c;包括法律法规、…