express 下搞一个 websocket 长连接

安装模块

npm i express

npm i express-ws

新建文件app.js

先安排源码 监听端口 7777

javascript 复制代码
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模拟请求工具

再试试前端主动发消息的

相关推荐
tokepson7 小时前
Mysql下载部署方法备份(Windows/Linux)
linux·服务器·windows·mysql
nbsaas-boot8 小时前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
zz_nj9 小时前
工作的环境
linux·运维·服务器
willhuo10 小时前
基于xray的匿名、授权、IP白名单代理访问研究
服务器·网络·tcp/ip
南烟斋..11 小时前
GDB调试核心指南
linux·服务器
像风一样自由13 小时前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
小李独爱秋14 小时前
计算机网络经典问题透视:TLS协议工作过程全景解析
运维·服务器·开发语言·网络协议·计算机网络·php
阿甘正赚.15 小时前
Linux初学
linux·运维·服务器
前端付豪15 小时前
必知 Express和 MVC
前端·node.js·全栈
特别橙的橙汁15 小时前
Node.js 调用可执行文件时的 stdout 缓冲区问题
前端·node.js·swift