redis实现发布和订阅
示例
publish.js
// 引入redis
let redis = require("redis");
// 创建连接
let client = redis.createClient(6379, "127.0.0.1");
client.on("ready", function () {
//订阅消息
client.subscribe("chatB");
});
// 失败处理
client.on("error", function (error) {
console.log("Redis Error " + error);
});
//监听订阅成功事件
client.on("subscribe", function (channel, data) {
console.log("client subscribed to " + channel + ",data:" + data);
});
//收到消息后执行回调,message是redis发布的消息
client.on("message", function (channel, message) {
console.log("我接收到信息了" + message);
});
//监听取消订阅事件
client.on("unsubscribe", function (channel, count) {
console.log("client unsubscribed from" + channel + ", " + count + " total subscriptions")
});
function zadd(channel, data) {
client.publish("chatA", data);//client将member发布到chat这个频道
//然后订阅这个频道的订阅者就会收到消息
}
for (let i = 0; i < 10; i++) {
zadd("z", "" + i);//发布10次
}
readRedis.js
let redis = require("redis");
let client = redis.createClient(6379, "127.0.0.1");
//客户端连接redis成功后执行回调
client.on("ready", function () {
//订阅消息
client.subscribe("chatA");
});
// 失败处理
client.on("error", function (error) {
console.log("Redis Error " + error);
});
//监听订阅成功事件
client.on("subscribe", function (channel, data) {
console.log("client subscribed to " + channel + ",data:" + data);
});
//收到消息后执行回调,message是redis发布的消息
client.on("message", function (channel, message) {
console.log("我接收到信息了" + message);
});
//监听取消订阅事件
client.on("unsubscribe", function (channel, count) {
console.log("client unsubscribed from" + channel + ", " + count + " total subscriptions")
});
先执行readRedis.js,后执行publish.js,readRedis.js的控制台输出:
我接收到信息了0
我接收到信息了1
我接收到信息了2
我接收到信息了3
我接收到信息了4
我接收到信息了5
我接收到信息了6
我接收到信息了7
我接收到信息了8
我接收到信息了9
每个文件都可以监听和发布消息。