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

server/2024/12/29 7:12:33/

首页是用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/server/154132.html

相关文章

python安装

python安装 1.下载2.安装3.验证安装成功 1.下载 &#xff08;1&#xff09;下载网址&#xff1a;https://www.python.org/downloads/windows/ 进入后稍等一会&#xff0c;比较慢 &#xff08;2&#xff09;选择版本 2.安装 &#xff08;1&#xff09;双击或者以管理员身份运…

Mask R-CNN

目录 摘要 Abstract Mask R-CNN 网络架构 Backbone RPN Proposal Layer ROIAlign bbox检测 Mask分割 损失计算 实验复现 总结 摘要 Mask R-CNN是在Faster R-CNN的基础上进行改进的目标检测和实例分割网络。Faster R-CNN主要用于目标检测&#xff0c;输出对象的边…

王佩丰24节Excel学习笔记——第十九讲:Indirect函数

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 如果indirect引用出错&#xff0c;首先检查一下引用位置的双引号有没有出错&#xff0c;再检查引用值的位置是否出错&#xff0c;如果是双引号出错&#xff0c;可以使用英文状态下输入…

Unity游戏环境交互系统

概述 交互功能使用同一个按钮或按钮列表&#xff0c;在不同情况下显示不同的内容&#xff0c;按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种&#xff0c;单选项交互&#xff0c;一般使用射线检测&#xff1b;多选项交互&#xff0c;一般使用范围检测。第一人…

虚幻引擎结构之UObject

一. UObject 的介绍 UObject 是虚幻引擎中的核心基础类,所有其他游戏对象和资源类都直接或间接地继承自它。作为虚幻引擎的基石,UObject 提供了多项关键功能,包括内存管理、序列化、反射(introspection)、垃圾回收以及元数据支持。在虚幻引擎中,UObject 类的实例通常被称…

Linux系统编程——线程

目录 一、前言 二、线程 1、线程的理解 三、线程相关的接口 1、线程的创建 2、线程的等待 3、实验 四、总结 1、线程优点 2、线程缺点 3、线程异常 4、Linux下的进程与线程对比 一、前言 之前的文章中我们已经对进程相关的概念做了认识&#xff0c;从创建进程、子进…

DevOps工程技术价值流:Ansible自动化与Semaphore集成

在DevOps的浪潮中&#xff0c;自动化运维工具扮演着举足轻重的角色。Ansible&#xff0c;作为一款新兴的自动化运维工具&#xff0c;凭借其强大的功能和灵活性&#xff0c;在运维领域迅速崭露头角。本文将深入探讨Ansible的特点、架构、工作原理&#xff0c;以及其应用场景&…

SDK 指南

在前端开发中&#xff0c;SDK&#xff08;Software Development Kit&#xff0c;软件开发工具包&#xff09;是一个用于帮助开发者在特定平台、框架或技术栈中实现某些功能的工具集。 1. SDK 是什么&#xff1f; SDK 是一种开发工具包&#xff0c;它提供了开发人员实现某些功…