在 Celery 中,除了远程控制之外,还有一个元素可以让我们对分布式中的任务的状态有所掌控,而且从实际意义上来说,这个元素对 Celery 更为重要,这就是在本文中将要说到的 Event. 在 Celery 中,注册了很多的 Event,这些 Event 将会在 Task/Worker 的状态发生变化的时候被发出,然后被绑定的 Event 消费者(Receiver)所接受,绑定的 Event 消费者可以是一连串的回调函数,相信细心的同学在前面的源码解析过程中也有发现一些关于 event 的蛛丝…
卤煮在大概一年前写过backbone的源码分析,里面讲的是对一些backbone框架的方法的讲解.这几天重新看了几遍backbone的源码,才发现之前对于它的理解不够深入,只关注了它的一些部分的细节和实现技巧.忽略了它的设计思想,而卤煮认为,一套库或者框架最值得借鉴的地方正好是它的设计思想.也巧,最近卤煮在读<设计模式与实践>这本书,所以温故知新,学以致用,打算写一篇博客算作这个系列的补充,以免将来忘记了代码时可以作为参考. 观察者模式 即使不用读源码,也知道backbone使用了观察者模式.…
Model(模型)模块在bk框架中的作用主要是存储处理数据,它对外和对内都有很多操作数据的接口和方法.它与视图(Views)模块精密联系着,通过set函数改变数据结构从而改变视图界面的变化.下面我们来看一下它的构造函数: //传入两个参数,a需要保存的数据,b是该模型所属的colltion,如果没有可以为空 e.Model = function(a, b) { var c; a || (a = {}); //defaults 是默认的属性,在extend该模型的时候可以设置一些默认必选的属性.…
View视图故名思义,它控制的是界面.我们可以把一个大的网页分成很多部分的视图,按照backbone的架构,每一个视图对应都是一个对象,我们可以通过元素的钩子(id或者class或者其他选择器)把它们封装到View对象中集中操作.由于传统项目中界面视图和数据不分层,使得各种操作数据逻辑和视图逻辑的代码混杂在一起,提高了代码的耦合度.backbone就是将这种情况作了很好的处理.下面我们通过一个简单的例子一步步地讲明白它的具体设计思路: 首先我们编写基础的html: <div id="m&q…
Collection模块式是对分散在项目中model的收集,他可以存储所有的model,构成一个集合,并且通过自身的方法统一操作model.Collection模块包装着若干对象,对象本身不具有一些方法,而它可以应用集合自身方法进行管理.它自身定义了一些方法,同时继承依赖库的一些方法,使得它能够对自身存储的model进行统一操作管理.这篇文章将对collection进行分析,源码写在下面: //构造函数 e.Collection = function(a, b) { b || (b = {});…
Backbone是一个当下比较流行的MVC框架.它主要分为以下几个模块: Events, View, Model, Collection, History, Router等几大模块.它强制依赖underscore,jq或者zepto库.通过它,我们可以轻松地来创建单页面应用或者响应式布局界面.它将数据层和界面层抽离,并且使每个View都在自己内部维护自己的业务逻辑,我们更多地去关注单个界面的自身逻辑.以每个模块为例子我们接下来对backbone的设计模式和源代码进行简单的分析. Events事件…
本文主要讲解OpenJDK观察者模式的2个工具类,java.util.Observer观察者接口,java.util.Observable被观察者基类. 然后,给出了一个常见的观察者应用示例. Observer观察者接口 /** * 一个类可以实现Observer接口,当它想要得到"被观察者"对象变化通知的时候 */ public interface Observer { /** * 当被观察的对象发生变化时,这个方法被调用.一个应用调用Observable对象的notifyObser…
今天是四月十二号,距离上次写博已经将近二十天了.一直忙于工作,回家被看书的时间占用了.连续两个礼拜被频繁的足球篮球以及各种体育运动弄的精疲力竭,所以很少抽时间来写技术博客.今天抽出时间把backbone的基本模块部分写完,还有一篇总结篇就结束这个系列了.昨天下了一整天的雨,天空放晴,外面一片清澈,索性来到大学城图书馆待会儿.别的就不扯了,下面开始进入正题. 这次我们将Router模块和history合并在一起,我们简称它们为路由器模块, 在backbone里面充当引路人的角色,它会监听浏览器里面…
这次继续介绍文件夹Serialization下的类AFURLResponseSerialization.这次介绍就不拆分了,整体来看一下.h和.m文件. 协议AFURLResponseSerialization通过一个解码数据转换成一个更有用的对象表示的对象被遵守,根据服务器响应的细节.响应序列化器可能另外执行在传入的响应和数据上的验证. 比如,一个JSON响应序列器可以检查一个可接受的状态码(“2 xx”范围)和内容类型(application / JSON),解码一个有效的JSON响应成为一…
上篇博客我们聊了observe().map().filter()延展函数的具体实现方式以及使用方式.我们在之前的博客中已经聊过,Signal的主要功能是位于SignalProtocol的协议延展中的,而且延展函数是非常的多的.今天博客中我们继续来聊SignalProtocol中那些比较核心的延展实现.本篇博客我们就来聊一下take()函数的使用以及实现方式,并且再聊一下Signal中collect()的相关实现. 一.take(first) 本部分我们就来聊一下take(first)的使用方式以…