欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nodejs redis 發(fā)布訂閱機制封裝實現(xiàn)方法及實例代碼

 更新時間:2016年12月15日 12:01:55   投稿:lqh  
這篇文章主要介紹了nodejs redis 發(fā)布訂閱機制封裝的相關(guān)資料,這里提供了實現(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

    本篇文章主要介紹了3分鐘快速搭建nodejs本地服務(wù)器方法運行測試html/js,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • node?path的使用詳解

    node?path的使用詳解

    這篇文章主要介紹了node?path的使用詳解,使用path.join()方法,可以把多個路徑片段拼接為完整的路徑字符串,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Node交互式的SFTP上傳實現(xiàn)過程剖析

    Node交互式的SFTP上傳實現(xiàn)過程剖析

    這篇文章主要為大家介紹了Node交互式的SFTP上傳實現(xiàn)過程剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • node.js博客項目開發(fā)手記

    node.js博客項目開發(fā)手記

    本篇文章給大家總結(jié)了node.js博客項目開發(fā)的相關(guān)步驟以及知識點分享,有興趣的朋友參考下。
    2018-03-03
  • node.js中的fs.writeSync方法使用說明

    node.js中的fs.writeSync方法使用說明

    這篇文章主要介紹了node.js中的fs.writeSync方法使用說明,本文介紹了fs.writeSync的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • NodeJS感知和控制自身進程的運行環(huán)境和狀態(tài)

    NodeJS感知和控制自身進程的運行環(huán)境和狀態(tài)

    NodeJS可以感知和控制自身進程的運行環(huán)境和狀態(tài),也可以創(chuàng)建子進程并與其協(xié)同工作,這使得NodeJS可以把多個程序組合在一起共同完成某項工作,并在其中充當膠水和調(diào)度器的作用,和進程管理相關(guān)的API單獨介紹起來比較枯燥,這里從一些典型的應(yīng)用場景出發(fā)
    2024-01-01
  • Node.js系列之發(fā)起get/post請求(2)

    Node.js系列之發(fā)起get/post請求(2)

    這篇文章主要為大家詳細介紹了Node.js系列之發(fā)起get/post請求,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • node.js中的path.resolve方法使用說明

    node.js中的path.resolve方法使用說明

    這篇文章主要介紹了node.js中的path.resolve方法使用說明,本文介紹了path.resolve的方法說明、接收參數(shù)、語法、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • nodejs 整合kindEditor實現(xiàn)圖片上傳

    nodejs 整合kindEditor實現(xiàn)圖片上傳

    這篇文章主要介紹了nodejs 整合kindEditor實現(xiàn)圖片上傳,需要的朋友可以參考下
    2015-02-02
  • 詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——5.素材管理接口,非常具有實用價值,需要的朋友可以參考下
    2017-04-04

最新評論