express 下搞一个 websocket 长连接

news/2024/5/18 14:17:42 标签: express, node.js, 服务器, 游戏程序

 安装模块

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.remotePort
    clientObject[key] = {
        cli:client,
        heartBeat:1,
    }
    // 消息
    client.on('message', (message) => {
        client.send("收到你的消息了" + message)
    })
    // 关闭
    client.on('close', () => {
        var key = req.socket.remoteAddress + "_" +  req.socket.remotePort
        if(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].cli
        var heartBeat = clientObject[key].heartBeat
        clientObject[key].heartBeat += 1
        try {
            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.niftyadmin.cn/n/5262046.html

相关文章

汽车检测线设备生产厂家公司

康士柏专注于汽车检测站设备研发,实现生产、销售、服务一体化,行业深耕20多年。并致力成为汽车后市场服务商的佼佼者。主要产品包括:汽车综合性能检测线、汽车安全性能检测线、汽车环保检测线、汽车整车下线检测线、二级维护检测线、竣工线、…

共享门店会在未来新零售占据主角吗?

共享门店作为一种创新的商业模式,在未来新零售领域中可能会占据一定的角色,但具体是否会成为主角,还需要根据市场的发展和技术的进步来判断。 首先,共享门店模式通过资源共享、风险共担、客户共享和收益共享等方式,为…

【前端】vscode 相关插件

一 插件: 01、ESLint 用来识别并检查ECMAScript/JavaScript 代码的工具 02、Prettier 用来格式化代码,如.js、.vue、css等都可以进行格式化 03、Vetur 用来识别并高亮vue语法 04、EditorConfig 用来设置vscode的编程行为 二、安装依赖 01、…

基于当前实时云渲染的特点,用户体验主要受哪些因素影响?

在回答这个问题之前我们首先需要理解什么是实时云渲染? 点量实时云渲染是一种基于云计算低延迟传输,实现各种轻终端便捷使用云端大型软件和3D应用的一种云技术解决方案。这一技术解决方案通过将应用程序或内容置于云端服务器上运行,然后以视…

echarts自定义tooltip位置和内容

tooltip: {trigger: item,backgroundColor: none,position: function (pos, params, dom, rect, size) {//我这个是每次显示30条数据 所以这么判断var obj params.dataIndex < 15 ? "right" : "left"return obj;},formatter: (params) > {//收入和…

【UE5 Niagara】烟雾弹效果

效果 步骤 1. 新建一个工程&#xff0c;创建Basic关卡 2. 新建一个Actor蓝图&#xff0c;这里命名为“BP_SmokeBomb” 打开“BP_SmokeBomb”&#xff0c;添加一个静态网格体和一个发射物移动组件&#xff0c;静态网格体使用圆柱模型 选中发射物移动组件&#xff0c;设置初始速…

Springboot获取jar版本方法

Springboot获取jar版本方法 方案一: 通过jar的pom.properties文件获取 获取demo Properties properties new Properties(); try {properties.load(RakicAppInfo.class.getResourceAsStream("/META-INF/maven/com.rakic.framework/rakic-app-springboot-start/pom.pro…

unity 模型生成PNG图片并导出(可以任意控制方向和大小,本文提供三种方案)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、插件RuntimePreviewGenerator&#xff08;方案一&#xff09;二、unity 官方提供的接口&#xff08;方案二&#xff09;三、方法三&#xff0c;可以处理单个模型&#xff0c;也…