科技新闻

手动实现一个eventEmitter

本小妞迷上赌 提交于 2020-03-30 04:37:57
观察者模式在前端开发中非常常用,我们经常用的事件就是观察者模式的一种体现。它对我们解耦模块、开发基于消息的业务起着非常重要的作用。Node.js 原生自带 EventEmitter 模块,可见它的重要性。 作为在工作中经常遇到和面试的经典题目当然要琢磨透彻,下面一步步手动写一个eventEmitter 首先,我们要知道EE的api是什么样的 node的EventEmitter包含了很多常用的API,我们一一来介绍几个实用的API. 方法名 方法描述 addListener(event, listener) 为指定事件添加一个监听器到监听器数组的尾部。 prependListener(event,listener) 与addListener相对,为指定事件添加一个监听器到监听器数组的头部。 on(event, listener) 其实就是addListener的别名 once(event, listener) 为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。 removeListener(event, listener) 移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器 off(event, listener) removeListener的别名 removeAllListeners([event]) 移除所有事件的所有监听器,

IOS中通知中心(NSNotificationCenter)的使用总结

无人久伴 提交于 2020-03-30 04:23:31
IOS中通知中心NSNotificationCenter应用总结 一、了解几个相关的类 1、 NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量。 这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。 @property (readonly , copy ) NSString *name; 这个成员变量定义一个对象,可以理解为针对某一个对象的消息。 @property (readonly , retain ) id object; 这个成员变量是一个字典,可以用其来进行传值。 @property (readonly , copy ) NSDictionary *userInfo; NSNotification的初始化方法: - ( instancetype)initWithName:( NSString *)name object:( id)object userInfo:( NSDictionary *)userInfo; + ( instancetype)notificationWithName:( NSString *)aName object:( id)anObject; + ( instancetype)notificationWithName:( NSString *)aName object:( id)anObject userInfo

消息通信机制NSNotificationCenter -备

依然范特西╮ 提交于 2020-03-30 03:33:39
消息通信机制NSNotificationCenter的学习。最近写程序需要用到这类,研究了下,现把成果和 NSNotificationCenter是专门供程序中不同类间的消息通信而设置的,使用起来极为方便, 长话短说。 设置通知,就是说要在什么地方(哪个类)接受通知,一般在初始化中做。 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test:) name:@"test" object:nil]; 我仅对以上参数做以说明:addObserver 这个是观察者,就是说 在什么地方接收通知; selector 这个是收到通知后,调用何种方法; name: 这个是通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。 发送通知,就是说此时要调用观察者处的方法。 [[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:searchFriendArray]; 我仅对以上参数做以说明: postNotificationName:通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。 object:传递的参数 发送通知时,默认调用test方法。 - (void) test:

NSNotificationCenter消息通信(KVO)

笑着哭i 提交于 2020-03-30 03:32:39
NSNotificationCenter 是程序不同类间的消息通信. 注册 消息 通知: 1 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(mthMsg:) name:@"mthMsg" object:nil]; addObserver:  注册通知 selector: 收到通知后调用何种方法; name: 通知的名字(唯一标示)。 发送消息通知 : [[NSNotificationCenter defaultCenter] postNotificationName:@"mthMsg" object:obj]; postNotificationName:消息的名称 //键盘注册通知1 //键盘升起 2 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 3 //键盘降下 4 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)

[iPhone开发]消息通信机制NSNotificationCenter

谁说我不能喝 提交于 2020-03-30 03:31:10
最近写程序需要用到这类,研究了下,现把成果和大家分享。 NSNotificationCenter 是专门供程序中不同类间的消息通信而设置的,使用起来极为方便, 长话短说。 设置通知,就是说要在什么地方(哪个类)接受通知,一般在初始化中做。 [[ NSNotificationCenter defaultCenter] addObserver :self selector :@selector(test:) name:@"test " object : nil ]; 我仅对以上参数做以说明: addObserver  这个是观察者,就是说 在什么地方接收通知 ;   selector  这个是收到通知后,调用何种方法 ;   name : 这个是通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。 发送通知,就是说此时要调用观察者处的方法。 [[NSNotificationCenter defaultCenter ] postNotificationName :@"test"  object : searchFriendArray ]; 我仅对以上参数做以说明: postNotificationName :通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。 object :传递的参数 发送通知时,默认调用 test 方法。 - ( void ) test:(

IOS消息机制-NSNotification与NSNotificationCenter

自作多情 提交于 2020-03-30 03:08:51
  IOS的消息机制其实是观察者模式的一个实践。你对某个事件感兴趣,那就就去注册成为他的观察者,这样当这个事件发生时就会收到人家的通知啦,就这么简单。还记得我们在《IOS之MVC》中说过,model不能直接调用controller,但是可以通过某种特殊的手段,间接的告诉controller去干什么,从而达到调用的目的。通过发送消息可以达到代码的彻底解耦。   消息机制的主要流程是:      与notification相关的类及方法使用: NSNotification   NSNotification封装了一些信息是的通过NSNotificationCenter发送消息的时候可以携带一些额外的信息。一个NSNotification对象包括一个name,object和一个额外的dictionary。name是用来标识一个消息的tag,object是消息的发送者想告诉消息接受者的一个对象(通常是消息的发送者),而dic存储了一些消息相关的信息。NSNotification是不可变的对象。   你可以通过下面的这些方法创建一个NSNotification对象:    + notificationWithName:object:   + notificationWithName:object:userInfo:    – initWithName:object:userInfo:   -

消息通知机制(NSNotification和NSNotificationCenter)

一笑奈何 提交于 2020-03-30 03:07:14
作者:FlyElephant 出处: http://www.cnblogs.com/xiaofeixiang iOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多,类之间的传值用到的比较多,不过委托相对来说只能是一对一,比如说页面A跳转到页面B,页面的B的值改变要映射到页面A,页面C的值改变也需要映射到页面A,那么就需要需要两个委托解决问题。NSNotificaiton则是一对多注册一个通知,之后回调很容易解决以上的问题。 基础概念 iOS消息通知机制算是同步的,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,属于典型的观察者模式。 消息通知中重要的两个类: (1)NSNotificationCenter: 实现NSNotificationCenter的原理是一个观察者模式,获得NSNotificationCenter的方法只有一种,那就是[NSNotificationCenter defaultCenter] ,通过调用静态方法defaultCenter就可以获取这个通知中心的对象了

Learn Orleans 04 - Persistent

只谈情不闲聊 提交于 2020-03-30 01:50:56
上一讲,我们能够通过HelloWorld多线程来实现无锁的请求响应。 这一讲,我们来讲解如何保存Actor的状态。 Actor的状态是通过消息来访问来改变的,对应到上一讲的计数例子,Actor的状态其实是记录于内存中,通过成员遍历_count来保存。 这一讲通过改造上一讲的例子,来讲述Orleans的State状态保存机制。 上一讲中我们的Grain定义为: public class HelloGrain : Orleans.Grain, IHello Grain还有另外一种泛型定义,以State类型作为模板参数使用,对Grain的修改如下: [StorageProvider(ProviderName="DevStore")] public class HelloGrain : Orleans.Grain<PersistentData>, IHello { …… public async Task AddCount() { this.State.Count ++; await this.WriteStateAsync(); } …… public override Task OnActivateAsync() { this.ReadStateAsync(); return base.OnActivateAsync(); } public override Task

(一)Redis简介及安装

寵の児 提交于 2020-03-29 23:05:09
Redis简介 Redis 是一个开源(BSD许可)的,内存中的key-value数据结构存储系统,它可以用作数据库、缓存和消息中间件。 Redis具有丰富的数据结构类型。包括字符串(string), 哈希(hash), 列表(list), 集合(set), 有序集合(sorted set)。 Redis提供数据持久化、事务、订阅分发、LUA脚本、过期自动删除key、内存回收、自动故障转移等功能; Redis对数据类型的操作具有原子性,保证了数据的完整; Redis采用运行在内存中的数据集工作方式使得Redis具备卓越的性能。 Redis安装(windows) 下载地址: https://github.com/MSOpenTech/redis/releases 进入Redis目录,打开cmd,执行 redis-server.exe redis.windows.conf # 也可以直接redis-server.exe 再打开另一个cmd,执行 redis-cli.exe -h 127.0.0.1 -p 6379 # 也可以直接redis-cli.exe 测试一下,在cli端执行 ping # 显示PONG即成功 设置服务为开机启动 redis-server.exe --service-install redis.windows-service.conf 启动 redis-server

02 activemq的queue模式

无人久伴 提交于 2020-03-29 18:44:51
activemq共有两种模式,一是点对点,一是发布和订阅,不管是哪种方式,都包含两个角色,一是消息的生产者,一是消息的消费者。点对点是消息只能被一个消费者收到,消息必达。本文将阐述使用java完成queue模式的应用。 1、前提约束 已经安装和启动activemq https://www.jianshu.com/p/47d6d824ad50 2、使用idea创建一个maven的项目 https://www.jianshu.com/p/042073b7710b 3、修改pom.xml 在pom.xml中加入以下依赖: <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.15.3</version> </dependency> 4、创建一个消息的生产者 import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class P2PProducer { public static void main(String[] args) throws Exception{ //1.创建连接工厂 ActiveMQConnectionFactory