nodejs创建ws服务器,前端浏览器用websocket接收信息和发送信息给服务端

devtools/2024/12/26 9:30:00/

首页是用nodejs建立服务器
//wsserver.js

const WebSocket=require('ws');
const wss=new WebSocket.Server({port:8080});
wss.on('connection',function connection(ws){ws.on('error',console.error);//接收客户端发送过来的信息ws.on('message',function message(data){console.log('received:%s',data);});//向服务端发送信息ws.send('你好啊客户端');
})

//创建前端websocket文件
websocketclient.js

class WebSocketClient {//私有成员url和socket变量#privateUrl = '';#privateSocket = null;#messageQueue = []; // 消息队列,用于存储在连接打开前的消息constructor(url) {this.#privateUrl = url;//创建websocket对象,url就是服务器地址:ws://localhost:8080this.#privateSocket = new WebSocket(this.#privateUrl);//建立连接函数this.#setupWebSocketEvents();}#setupWebSocketEvents() {this.#privateSocket.onopen = () => {console.log(`连接成功,等待服务端数据推送[onopen]...`);// 连接打开后,发送队列中的消息this.#messageQueue.forEach(msg => this.#privateSocket.send(msg));this.#messageQueue = []; // 清空消息队列};//下面三个必须用箭头函数才能反应上下文关系this.#privateSocket.onmessage = (event) => {console.log('服务端发送来的数据%s', event.data);};this.#privateSocket.onclose = () => {console.log('连接已断开[onclose]...');};this.#privateSocket.onerror = (event) => {console.log('连接异常[onerror]');};}//这里客户端发送信息,如果是已经连接状态则直接发送信息,如果未打开连接或连接中,则把信息添加到队列中sendWhenConnected(message) {if (this.#privateSocket && this.#privateSocket.readyState === WebSocket.OPEN) {this.#privateSocket.send(message);} else {// 如果WebSocket尚未打开连接,则将消息添加到队列this.#messageQueue.push(message);}}//关闭连接close() {if (this.#privateSocket) {this.#privateSocket.close();this.#privateSocket = null;}}
}
//导出WebSocketClient类
export default WebSocketClient;

//html文件,index.html

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><title>测试websocket</title></head><body></body><script type="module">//导入类import WebSocketClient from './websocketclient.js';//创建对象连接let a=new WebSocketClient('ws://localhost:8080');//向服务端发送信息a.sendWhenConnected('你好啊服务端');</script>
</html>

最后结果为这样
在这里插入图片描述


http://www.ppmy.cn/devtools/145498.html

相关文章

【ES6复习笔记】Spread 扩展运算符(8)

在现代前端开发中&#xff0c;JavaScript 的扩展运算符&#xff08;Spread Operator&#xff09;是一个非常有用的特性&#xff0c;它允许你将数组或对象展开&#xff0c;以便在函数调用、数组拼接、对象复制等场景中更方便地处理数据。扩展运算符&#xff08;spread&#xff0…

spring mvcservlet跳转页面没有样式效果

导致该问题的原因很多&#xff0c;这里为解决办法之一 原因 <!-- 配置视图解析器 --> <bean class"org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name"prefix" value"/jsp/"/> <pro…

跨国企业组网方案——SD-WAN的优势和应用详解

随着全球化的深入发展&#xff0c;企业在海外设立分支机构已成为普遍现象。然而&#xff0c;如何在全球范围内实现稳定、安全的网络互联却是一大挑战。SD-WAN的出现&#xff0c;为跨国企业带来了全新的组网解决方案&#xff0c;本文将详细介绍跨国企业搭建SD-WAN组网后的优势和…

WebChat——一个开源的聊天应用

Web Chat 是开源的聊天系统&#xff0c;支持一键免费部署私人Chat网页的应用程序。 开源地址&#xff1a;https://github.com/loks666/webchat 目录树 TOC ??? 开始使用 & 交流?? 开箱即用 [这里是代码001] 使用 Docker 部署[这里是代码002] 使用 Docker-compose …

信管通低代码信息管理系统应用平台

目前&#xff0c;国家统一要求事业单位的电脑都要进行国产化替代&#xff0c;替代后使用的操作系统都是基于linux的&#xff0c;所有以前在WINDOWS下运行的系统都不能使用了&#xff0c;再者&#xff0c;各单位的软件都很零散&#xff0c;没有统一起来。需要把日常办公相关的软…

MLU运行Stable Diffusion WebUI Forge【flux】

文章目录 一、平台环境准备二、代码下载三、基础环境准备3.1 支援whl包 四、代码修改4.2 组件下载 六、运行效果 FLUX模型是由Black Forest Labs推出的一款文本生成图像的AI模型&#xff0c;具有120亿参数&#xff0c;显著提升了图像生成的质量和多样性‌。FLUX模型包含三个版本…

3.基于 Temporal 的 Couchbase 动态 SQL 执行场景

在使用 Temporal 和 Go 语言 调用 Couchbase 执行 SQL 脚本时&#xff0c;可以通过动态参数传递到 SQL 脚本中&#xff0c;以下是完整实现的指南&#xff1a; 1. Temporal Workflow 的参数传递 Temporal 的 Workflow 支持接收动态参数&#xff0c;将这些参数传递给执行 SQL 的…

【动态规划】按摩师

题目链接&#xff1a; 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 1、状态表示 用两个dp表&#xff0c;分别表示到当前位置接受预约和不接受预约 f[i]&#xff1a;表示到 i 位置&#xff0c;接受预约的最优预约集合 g[i]&#xff1a;表示到 i 位置&…