nodejs redis 發(fā)布訂閱機制封裝實現(xiàn)方法及實例代碼
nodejs redis 發(fā)布訂閱機制封裝
最近項目使用redis,對publish 和 subscribe的使用進行了了解,并進行了封裝。
var config = require('../config/config'); var log = require("./loghelp"); var redis = require("redis"); function initialclient(param) { var option={ host: config.redis.host, port: config.redis.port}; if(param) { option=Object.assign(option,param); } redis.print let client = redis.createClient(option); client.on("error", function(err) { log.error(err); }); return client; }
/*example: * let channel="ryan"; redis.pubSub.registerHandlers("ryan",msg=> console.log(msg)); redis.pubSub.subscribe(channel); redis.pubSub.publish(channel,"hello from chen");*/ class PubSub { constructor(){ this.sub=initialclient(); this.handlers=new Map(); this.subAction=(channle,message)=>{ let actions= this.handlers.get(channle)||new Set(); for(let action of actions) { action(message); } } this.alredyPublishs=[]; this.subConnected=false; } publish(channel,message) { let action=()=>{ let pub=initialclient(); pub.publish(channel,message); }; if(this.subConnected===false) { this.alredyPublishs.push(action); } else action(); } registerHandlers(channel,action) { var actions=this.handlers.get(channel)||new Set(); actions.add(action); this.handlers.set(channel,actions); } subscribe(channel) { let self=this; this.sub.subscribe(channel,function (err,reply) { if(err) log.error(err); self.subConnected=true; for(let publish of self.alredyPublishs) publish(); console.log(reply); }); this.sub.on("message", function (channel, message) { self.subAction(channel,message); }); } tearDown() { this.sub.quit(); } }
然后通過exports.pubsub=new PubSub() 將其暴漏,可保證是單例。在程序啟動時,調(diào)用
registerHandlers 注冊特定通道的處理邏輯,然后調(diào)用
subscribe 訂閱通道。
在合適時機調(diào)用publish,這個機制可以實現(xiàn)分布式下所有客戶端watch 同一個數(shù)據(jù)的更改。
本人全手工打造的dotnetcore webapi 框架,可實現(xiàn)快速開發(fā)。
地址:http://xiazai.jb51.net/201612/yuanma/WebApiCore-master(jb51.net).rar。
1 采用DDD模式開發(fā),充血模型 2 添加Dapper擴展,默認實現(xiàn)增刪改查基本操作。利用AutoMapper 做實體轉(zhuǎn)換,減少重復(fù)勞動。 3 依賴注入融合Autofac,倉儲層和應(yīng)用層自動注入 4 實現(xiàn)JWT驗證 5 加入swagger 文檔 6 單元測試添加了xunit,MyMvc 可以方便對webapi測試 7 數(shù)據(jù)庫版本控制
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
3分鐘快速搭建nodejs本地服務(wù)器方法運行測試html/js
本篇文章主要介紹了3分鐘快速搭建nodejs本地服務(wù)器方法運行測試html/js,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04NodeJS感知和控制自身進程的運行環(huán)境和狀態(tài)
NodeJS可以感知和控制自身進程的運行環(huán)境和狀態(tài),也可以創(chuàng)建子進程并與其協(xié)同工作,這使得NodeJS可以把多個程序組合在一起共同完成某項工作,并在其中充當膠水和調(diào)度器的作用,和進程管理相關(guān)的API單獨介紹起來比較枯燥,這里從一些典型的應(yīng)用場景出發(fā)2024-01-01nodejs 整合kindEditor實現(xiàn)圖片上傳
這篇文章主要介紹了nodejs 整合kindEditor實現(xiàn)圖片上傳,需要的朋友可以參考下2015-02-02