现在的位置: 首页 > 综合 > 正文

redis pubsub.c

2013年10月27日 ⁄ 综合 ⁄ 共 1295字 ⁄ 字号 评论关闭

channel是一个精确的名字,pattern则是glob匹配(通配符匹配)。

这个文件主要包含了以下接口:

int listMatchPubsubPattern(void *a, void *b) ;  // a和b指向pubsubPattern结构:

/*

  typedef struct pubsubPattern {

    redisClient* client;

    robj* pattern;

  };

*/

// 订阅频道,往client->pubsub_channels这个set中添加,往server.pubsub_channels对应client列表中添加client

int pubsubSubscribeChannel(redisClient *c, robj *channel);

int pubsubUnsubscribeChannel(redisClient *c, robj *channel, int notify);

//  订阅pattern,往client->pubusb_patterns这个list中添加,往server.pubusb_patterns中添加pubsubPattern结构
int pubsubSubscribePattern(redisClient *c, robj *pattern);

int pubsubUnsubscribePattern(redisClient *c, robj *pattern, int notify);

int pubsubUnsubscribeAllChannels(redisClient *c, int notify);
int pubsubUnsubscribeAllPatterns(redisClient *c, int notify);

// 发布消息时先对匹配channel的clients发送,然后对匹配pattern的clients发送
int pubsubPublishMessage(robj *channel, robj *message);

void freePubsubPattern(void *p);  // 需要decrRefCount(p->pattern)


// 相应的命令在这里,subscribe后面跟几个参数,逐一订阅

void subscribeCommand(redisClient *c);

// 不跟参数,unsubscribe all,否则后面跟几个参数,逐一取消订阅
void unsubscribeCommand(redisClient *c);

// psubscribe后面跟几个参数,逐一订阅
void psubscribeCommand(redisClient *c);

// 不跟参数,unsubscribe all,否则后面跟几个参数,逐一取消订阅

void punsubscribeCommand(redisClient *c);

// 第一个参数是channel,第二个参数是message
void publishCommand(redisClient *c);

从上面看来,channels和pattern都需要在client和server中保存,不过channels用set保存,patterns用list保存。

抱歉!评论已关闭.