node.js+redis+express 实现发布订阅功能

本文详细介绍了如何结合Node.js、Redis和Express框架构建一个基本的发布订阅系统。首先,通过Node.js连接Redis服务器,利用Redis的pub/sub特性创建发布者和订阅者。接着,结合Express搭建API接口,实现数据的发布和订阅操作。通过这个系统,用户可以实时接收和处理发布的消息,有效提升了应用的交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var redis = require('redis');
var express = require('express');
var app = express();

//这里建立了三个redis的客户端,为什么是3个呢?
//一个是发布,一个是订阅,一个是处理正常的req,res
//本来是想用订阅的client来处理的req,res,但是却报错
//后来查了以后才知道,原来如果此客户端订阅就不能下CRUD命令

var clientSub = redis.createClient(6379, 'localhost');
var clientPub = redis.createClient(6379, 'localhost');
var clientRes = redis.createClient(6379, 'localhost');

clientRes.on('ready', function(err){
    console.log('hello, i handle req/res');
});

clientPub.on('ready', function (err) {
    console.log('hello, i publish');
});

clientSub.on('ready', function (err) {
    console.log('hello, i subscribe');
});

clientSub.subscribe('channel1'); //订阅channel1

clientSub.on('subscribe', function (channel, count) {
    console.log(`got subscribe event: ${channel} and count is ${count}`);
    setInterval(()=>{
        clientPub.publish('channel1', `hi, i am channel one, message at ${new Date()}`);
    }, 2000); //每2秒钟发个消息
});

clientSub.on('connect', function () {
    clientSub.on('message', function (channel, message) {
        var response = `received message from ${channel}:${message}`; //订阅客户端接收到消息
        clientRes.lpush('myResponse', response,redis.print); //接收到消息以后,由req/res客户端来存储消息
    });
});

app.get('/', function (req, res) {
    clientRes.lrange('myResponse',0,-1, function(err, result){
        res.send(result);//拿出所有消息发到浏览器
    })  
})

app.listen(1338, function () {
    console.log('App listening on port 1338!');
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值