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模拟请求工具

再试试前端主动发消息的

相关推荐
楼田莉子30 分钟前
设计模式:创建型设计模式简介
服务器·开发语言·c++·设计模式
SPC的存折36 分钟前
6、MySQL设置TLS加密访问
linux·运维·服务器·数据库·mysql
wanhengidc39 分钟前
云手机搬砖安全吗
大数据·运维·服务器·安全·游戏·智能手机
wanhengidc44 分钟前
服务器管理器的作用有哪些?
运维·服务器·网络·安全·游戏·智能手机
JustNow_Man1 小时前
【opencode】使用方法
linux·服务器·网络·人工智能·python
旺王雪饼 www1 小时前
《Express框架深度解析:从基础入门到高级实践与项目架构》
前端·node.js·express
大数据新鸟1 小时前
协议值TCP
服务器·网络·tcp/ip
初願致夕霞1 小时前
Linux_线程
linux·运维·服务器·c++
CDN3601 小时前
高防服务器端口被占用 / 不通?端口映射与协议配置解决
运维·服务器
“愿你如星辰如月”1 小时前
从零构建高性能 Reactor 服务器:
linux·服务器·c++·websocket·tcp/ip