当前位置: 首页 > news >正文

网站开发对显卡的要求台州律师网站建设

网站开发对显卡的要求,台州律师网站建设,技术支持:洛阳网站建设,完整的软件开发流程频道的订阅和退订 当一个客户端执行 SUBSCRIBE 命令#xff0c; 订阅某个或某些频道的时候#xff0c; 这个客户端与被订阅频道之间就建立起了一种订阅关系。 Redis 将所有频道的订阅关系都保存在服务器状态的 pubsub_channels 字典里面#xff0c; 这个字典的键是某个被订…频道的订阅和退订 当一个客户端执行 SUBSCRIBE 命令 订阅某个或某些频道的时候 这个客户端与被订阅频道之间就建立起了一种订阅关系。 Redis 将所有频道的订阅关系都保存在服务器状态的 pubsub_channels 字典里面 这个字典的键是某个被订阅的频道 而键的值则是一个链表 链表里面记录了所有订阅这个频道的客户端 struct redisServer {// ...// 保存所有频道的订阅关系dict *pubsub_channels;// ...}; 每当客户端执行 SUBSCRIBE 命令 订阅某个或某些频道的时候 服务器都会将客户端与被订阅的频道在 pubsub_channels 字典中进行关联。 根据频道是否已经有其他订阅者 关联操作分为两种情况执行 如果频道已经有其他订阅者 那么它在 pubsub_channels 字典中必然有相应的订阅者链表 程序唯一要做的就是将客户端添加到订阅者链表的末尾。如果频道还未有任何订阅者 那么它必然不存在于 pubsub_channels 字典 程序首先要在 pubsub_channels 字典中为频道创建一个键 并将这个键的值设置为空链表 然后再将客户端添加到链表 成为链表的第一个元素。 SUBSCRIBE 命令的实现可以用以下伪代码来描述 def subscribe(*all_input_channels):# 遍历输入的所有频道for channel in all_input_channels:# 如果 channel 不存在于 pubsub_channels 字典没有任何订阅者# 那么在字典中添加 channel 键并设置它的值为空链表if channel not in server.pubsub_channels:server.pubsub_channels[channel] []# 将订阅者添加到频道所对应的链表的末尾server.pubsub_channels[channel].append(client) UNSUBSCRIBE 命令的行为和 SUBSCRIBE 命令的行为正好相反 —— 当一个客户端退订某个或某些频道的时候 服务器将从 pubsub_channels 中解除客户端与被退订频道之间的关联 程序会根据被退订频道的名字 在 pubsub_channels 字典中找到频道对应的订阅者链表 然后从订阅者链表中删除退订客户端的信息。如果删除退订客户端之后 频道的订阅者链表变成了空链表 那么说明这个频道已经没有任何订阅者了 程序将从 pubsub_channels 字典中删除频道对应的键。 UNSUBSCRIBE 命令的实现可以用以下伪代码来描述 def unsubscribe(*all_input_channels):# 遍历要退订的所有频道for channel in all_input_channels:# 在订阅者链表中删除退订的客户端server.pubsub_channels[channel].remove(client)# 如果频道已经没有任何订阅者了订阅者链表为空# 那么将频道从字典中删除if len(server.pubsub_channels[channel]) 0:server.pubsub_channels.remove(channel) 模式的订阅和退订 前面说过服务器将所有频道的订阅关系保存起来与此类似服务器也将所有模式的订阅关系存在了pubsub_Patterns属性里。 struct redisServer {// ...// 保存所有频道的订阅关系list *pubsub_patterns;// ...}; pubsub_Patterns属性是一个链表每个结点是被订阅的模式节点内记录了模式节点内的client属性记录了订阅模式的客户端。 typedef struct pubsubPattern{//订阅模式的客户端redisClient *client;//被订阅的模式robj *pattern; }pubsubPattern; 每当客户端执行PSUBSCRIBE这个命令来订阅某个或某些模式时服务器会对每个被订阅的模式执行下面的操作 1新建一个pubsubPattern结构设置好两个属性 2将新节点加到pubsub_patterns尾部 伪代码实现 def osubscribe(*all_input_patterns):#遍历所有输入的模式#记录被订阅的模式和对应的客户端pubsubPatterncreate()pubsubPattern.clientclientpubsubPattern.patternpattern#插入链表末尾server.pub_patterns.append(pubsubPattern) 模式退订命令PUNSUBSCRIBE是PSUBSCRIBE的反操作 服务器将找到并删除那些被退订的模式 伪代码如下我想吐槽一下这样时间复杂度。。。没有更好的办法吗 def osubscribe(*all_input_patterns):#遍历所有退订的模式for pattern in all_input_patterns:#遍历每一个节点for pubsubPattern in server.pubsub_patterns:#如果客户端和模式都相同if clientpubsubPattern.client:if patternpubsubPattern.pattern:#删除server.pub_patterns.remove(pubsubPattern) 发送消息 当一个客户端执行PUBLISHchannel message命令将消息发送给频道时服务器需要 1把消息发送给所有本频道的订阅者 具体做法就是去pubsub_channels字典找到本频道的链表也就是订阅名单然后发消息 2将消息发给包含本频道的所有模式中的所有订阅者 具体做法就是去pubsub_patterns查找包含本频道的模式并且把消息发送给订阅它们的客户端。 查看订阅信息 redis2.8新增三个命令用来查看频道和模式的相关信息。 PUBLISH CHANNELS[pattern]用于返回服务器当前被订阅的频道pattern可写可不写不写就查看所有否则查看与pattern匹配的对应频道 这个子命令是通过遍历pubsub_channels字典实现的。 PUBLISH NUMSUB[CHANNEL-1 CHANNEL-2.....]返回这些频道的订阅者数量 这个子命令是通过遍历pubsub_channels字典查看对应链表长度实现的。 PUBLISH NUMPAT返回被订阅模式数量 这个子命令是通过返回pubsub_patterns的长度实现的。 总而言之PUBSUB 命令的三个子命令都是通过读取 pubsub_channels 字典和 pubsub_patterns 链表中的信息来实现的。
http://wiki.neutronadmin.com/news/412599/

相关文章:

  • 对于协会的新年祝贺语网站模板在线销售管理系统
  • 龙泉驿区城乡建设局网站查找企业名录
  • 厦门公司做网站北京楼市最新消息
  • 大数据 做网站流量统计wordpress 写文章空白
  • 有哪些制作网站的公司吗建设网站的建筑公司
  • 南昌制作网站软件企业网站建站
  • 广州比较好的网站建设wordpress产品展示
  • 定制开发app软件seo是什么意思的缩写
  • 宁波做网站有哪些公司公司微信公众号网站开发模板
  • 教师网站建设机培训体会免费下载wordpress+支付宝+微信
  • 专做皮具的网站雄安投资建设集团网站
  • 书法 wordpress网站优化哪里好
  • 广州工商学院门户网站县网站建设运维情况自查报告
  • wordpress底部版权信息宁波seo外包
  • 绥芬河建设工程网站无锡网站App微信
  • 唐山seo网站建设做网站切图
  • 淄博网站推广公司青海省电话黄页
  • 广州哪个公司做网站好建设企业网站的模式
  • 中国档案网站建设的特点我注册过的网站
  • 广西南宁网站推广dedecms做图库网站
  • 互联网做网站地推网站建设方案策划书ppt模板下载
  • 网站建设需要的设备修改wordpress密码
  • 做网站编辑器西湖app开发公司
  • 苏州网站建设品牌公司建设社团网站的可行性分析
  • 沈阳快速建站搭建网络广告发布的形式主要包括
  • 北京城乡住房建设官方网站wordpress 二次开发 sso
  • 请多记几个本站域名防止失联无锡做网站公司多少钱
  • 网站首页怎么制作过程wordpress doshortcode
  • 购物网站功能设计网站关键词如何部署
  • cp网站建设宁波厂家关键词优化