express 下搞一个 websocket 长连接

 安装模块

npm i  express

npm i  express-ws

新建文件app.js

先安排源码  监听端口 7777

var express = require('express')
var app = express()
require('express-ws')(app)var port = 7777
var clientObject = {}
app.ws('/', (client, req) => {// 连接var key = req.socket.remoteAddress + "_" +  req.socket.remotePortclientObject[key] = {cli:client,heartBeat:1,}// 消息client.on('message', (message) => {client.send("收到你的消息了" + message)})// 关闭client.on('close', () => {var key = req.socket.remoteAddress + "_" +  req.socket.remotePortif(clientObject[key]){delete clientObject[key]}});// 错误client.on('error', () => {});
})app.get('/', (req, res) => {res.send("hello 2023");
});
app.listen(port);// 心跳
setInterval (() => {var time = Date.now()for(var key in clientObject){var client = clientObject[key].clivar heartBeat = clientObject[key].heartBeatclientObject[key].heartBeat += 1try {var sData = {rspdata:{heartBeat:heartBeat,time:time,},}client.send(JSON.stringify(sData))} catch(e) {}}
}, 1000*3);

app.get('/', (req, res) => {

    res.send("hello 2023");

});

测试下网页的显示 

再搞个模块的客户端 测下心跳

Websocket在线测试-Websocket接口测试-Websocket模拟请求工具

再试试前端主动发消息的

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

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

相关文章

预测性维护对制造企业设备管理的作用

制造企业设备管理和维护对于生产效率和成本控制至关重要。然而,传统的维护方法往往无法准确预测设备故障,导致生产中断和高额维修费用。为了应对这一挑战,越来越多的制造企业开始采用预测性维护技术。 预测性维护是通过传感器数据、机器学习和…

计算机网络——习题——书上原题

目录 第一章 1. 填空题 第二章 1. 填空题 第三章 1. 填空题 2.选择题 第四章 1. 填空题 第五章 第六章 1. 填空题 第一章 1. 填空题 (1)计算机网络的主要功能包括 资源共享、数据通信、分布式处理、提高计算机的可靠性和集中管理 。 &…

上海亚商投顾:沪指再度失守3000点 北向资金净卖出近百亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日集体调整,尾盘均跌超1%,北证50则逆势拉升涨超3%。医药股逆势走强&#xf…

Node.js模块化的基本概念和分类及使用方法

1.模块概念 模块:指解决一个复杂问题的时候,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来讲,模块是可以组合、分解和更换的单元。 在编辑领域中的模块,就是遵守固定的规则,把一个大文件拆成独立并且相互…

devops相关面试题

1、发布10 NPM包,熟悉NRM、NVM。 1、谈谈你参与发布的NPM包,它们解决了什么问题,有什么特点? NPM: 是 Node.js 默认的包管理工具 NRM:是 Node.js 源管理工具 NVM:Node.js 版本管理工具 我参与发布的NPM包为mk-form,它通过配置生成和验证复杂表单,简化…

网络编程及相关概念

网络 概念:两台或多台设备通过一定物理设备连接起来构成了网络 根据网络的覆盖范围不同,对网络进行分类: 局域网:覆盖范围最小,仅仅覆盖一片小区域。 城域网:覆盖范围较大,可以覆盖一个城市。…

打印机怎么扫描文件到电脑?6个步骤!轻松完成!

“在工作时我经常需要用到打印机,有时候需要将部分文件扫描到电脑。但是我不是很清楚应该如何操作,有什么方法可以让打印机快速传输文件到电脑的方法吗?” 在人们的工作和学习中,打印机成了很多用户的必备工具。人们可以用它来打印…

C++中的接口有什么用

2023年12月13日,周三上午 今天上午在适配器模式,我发现如果想真正理解适配器模式,就必须学会使用C中的接口,就必须明白为什么要在C中使用接口,所以重新学习了一下C中的接口 目录 C中的接口有什么用用代码说明“实现多…

python注释规范

Python 中的函数注释通常使用文档字符串(docstring)来提供对函数的说明。文档字符串是放置在函数、模块或类的顶部的字符串,用于描述其功能、输入参数、返回值以及其他相关信息。以下是一些建议的 Python 函数注释规范: 使用三重…

本地搭建Linux DataEase数据可视化分析工具并实现公网访问

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

软件测试面试中基础与功能的问题

一、 你们的测试流程是怎么样的? 答:1.项目开始阶段, BA (需求分析师) 从用户方收集需求并将需求转化为规格说明书,接 下来在 项目组领导 会组织需求评审。 2.需求评审通过后,BA 会组织 项目…

React中类组件和函数组件的区别?

面试官:说说对React中类组件和函数组件的理解?有什么区别? 一、类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数&#…

剑指 Offer(第2版)面试题 28:对称的二叉树

剑指 Offer(第2版)面试题 28:对称的二叉树 剑指 Offer(第2版)面试题 28:对称的二叉树解法1:递归解法2:镜像二叉树 前序遍历 剑指 Offer(第2版)面试题 28&…

kernel(三):kernel移植

本文主要探讨210官方kernel移植。 配置文件选择 选择配置文件smdkv210_android_defconfig(arch/arm/configs) 修改主Makefile 配置cpu架构和交叉编译工具链 vim MakefileARCH ? armCROSS_COMPILE ? /root/arm-2009q3/bin/arm-none-linux-gnueabi- 初步编译烧…

使用对象处理流ObjectOutputStream读写文件

注意事项: 1.创建的对象必须实现序列化接口,如果属性也是类,那么对应的类也要序列化 2.读写文件路径问题 3.演示一个例子 (1)操作的实体类FileModel,实体类中有Map,HashMap这些自带的本身就实现了序列化。 public class File…

Gradio: 实时性能反馈的机器学习演示工具 | 开源日报 No.107

comfyanonymous/ComfyUI Stars: 17.5k License: GPL-3.0 这个项目是 ComfyUI,它提供了一个图形化界面和后端来设计和执行复杂的稳定扩散工作流程。 节点/图表/流程图接口用于实验并创建复杂的稳定扩散工作全面支持不同版本的 Stable Diffusion异步队列系统部分更新…

薅github的羊毛-用pages建自己的博客或资源站 - 博客工具 - 2/2

笔者调研了好多个静态博客工具,最后锁定Hexo了,但不等于其他博客不行。我只吐槽两个 Hugo - 难用Gridea - 简直就是骗钱的,我交钱用不了 theme没有链接,同步也同步不了,估计以前是可以,现在经营不下去&…

十大经典排序算法知识体系终结篇

目录 一. 前言 二. 冒泡排序(Bubble Sort) 2.1. 概念 2.2. 算法步骤 2.3. 代码实现 三. 选择排序(Selection Sort) 3.1. 概念 3.2. 算法步骤 3.3. 代码实现 四. 插入排序(Insertion Sort) 4.1. …

wireshark使用

1、抓包界面介绍 2、过滤 (1) ip过滤 or 端口过滤 ip.src 192.168.1.104 显示源地址为192.168.1.104的数据包列表 ip.dst192.168.1.104, 显示目标地址为192.168.1.104的数据包列表 ip.addr 192.168.1.104 显示源IP地址或目标IP地址为192.168.1.104的数据包列表 port 80 …

C++进阶篇9---类型转换

C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型 转换和…