消息机制

iOS开发系列--通知与消息机制

三世轮回 提交于 2019-11-27 05:43:03
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情。iOS中通知机制又叫消息机制,其包括两类:一类是本地通知;另一类是推送通知,也叫远程通知。两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同。今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆。 本文包括下面内容 本地通知 推送通知 补充--iOS开发证书、秘钥 补充--通知中心 本地通知 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时、待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知。创建一个本地通知通常分为以下几个步骤: 创建UILocalNotification。 设置处理通知的时间fireDate。 配置通知的内容:通知主体、通知声音、图标数字等。 配置通知传递的自定义数据参数userInfo(这一步可选)。 调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用presentLocalNotificationNow立即调用通知。

RabbitMQ事务以及confirm机制

自古美人都是妖i 提交于 2019-11-27 04:58:13
本文是参考下面这篇博客然后进行复现浓缩后的总结 https://www.cnblogs.com/vipstone/p/9350075.html 正常情况下,如果消息经过交换器进入队列就可以完成消息的持久化,但如果消息在没有到达broker之前出现意外,那就造成消息丢失,有没有办法可以解决这个问题?RabbitMQ有两种方式来解决这个问题: 通过AMQP提供的事务机制实现; 使用发送者确认模式实现; 事务使用 事物的实现主要是对于信道(Channel)的设置,其中主要的方法有三个: channel.txSelect()声明启动事务模式; channel.txComment()提交事务; channel.txRollback()回滚事务; 尝试代码实现: public static void main ( String [ ] args ) throws IOException , TimeoutException { ConnectionFactory factory = new ConnectionFactory ( ) ; factory . setUsername ( "guest" ) ; factory . setPassword ( "guest" ) ; factory . setHost ( "localhost" ) ; factory . setPort (

消息队列及常见消息队列介绍

孤者浪人 提交于 2019-11-27 02:50:48
消息队列及常见消息队列介绍 一、消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。 消息队列主要解决了应用耦合、异步处理、流量削锋等问题。 当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。 二、消息队列使用场景 消息队列在实际应用中包括如下四个场景: 应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败; 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间; 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况; 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理; 下面详细介绍上述四个场景以及消息队列如何在上述四个场景中使用: 2.1 异步处理 具体场景:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。对这两个操作的处理方式有两种:串行及并行。 (1)串行方式:新注册信息生成后,先发送注册邮件

消息队列及常见消息队列介绍

纵饮孤独 提交于 2019-11-27 02:50:19
一、消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。 消息队列主要解决了应用耦合、异步处理、流量削锋等问题。 当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。 二、消息队列使用场景 消息队列在实际应用中包括如下四个场景: 应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败; 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间; 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况; 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理; 下面详细介绍上述四个场景以及消息队列如何在上述四个场景中使用: 2.1 异步处理 具体场景:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。对这两个操作的处理方式有两种:串行及并行。 (1)串行方式:新注册信息生成后,先发送注册邮件,再发送验证短信; 在这种方式下

浅谈消息队列及常见的消息中间件

我怕爱的太早我们不能终老 提交于 2019-11-27 02:50:00
消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段。它具有 低耦合 、 可靠投递 、 广播 、 流量控制 、 最终一致性 等一系列功能。 当前使用较多的 消息队列 有 RabbitMQ 、 RocketMQ 、 ActiveMQ 、 Kafka 、 ZeroMQ 、 MetaMQ 等,而部分 数据库 如 Redis 、 MySQL 以及 phxsql 也可实现消息队列的功能。 正文 1. 消息队列概述 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流 ,并基于 数据通信 来进行分布式系统的集成。 通过提供 消息传递 和 消息排队 模型,它可以在 分布式环境 下提供 应用解耦 、 弹性伸缩 、 冗余存储 、 流量削峰 、 异步通信 、 数据同步 等等功能,其作为 分布式系统架构 中的一个重要组件,有着举足轻重的地位。 2. 消息队列的特点 2.1. 采用异步处理模式 消息发送者 可以发送一个消息而无须等待响应。 消息发送者 将消息发送到一条 虚拟的通道 ( 主题 或 队列 )上, 消息接收者 则 订阅 或是 监听 该通道。一条信息可能最终转发给 一个或多个 消息接收者,这些接收者都无需对 消息发送者 做出 同步回应 。整个过程都是 异步的 。 2.2. 应用系统之间解耦合 主要体现在如下两点: 发送者和接受者不必了解对方、只需要 确认消息 ;

消息队列及常见消息队列介绍

怎甘沉沦 提交于 2019-11-27 02:49:39
一、消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。 消息队列主要解决了应用耦合、异步处理、流量削锋等问题。 当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。 二、消息队列使用场景 消息队列在实际应用中包括如下四个场景: 应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败; 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间; 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况; 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理; 下面详细介绍上述四个场景以及消息队列如何在上述四个场景中使用: 2.1 异步处理 具体场景:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。对这两个操作的处理方式有两种:串行及并行。 (1)串行方式:新注册信息生成后,先发送注册邮件,再发送验证短信; 在这种方式下

较好的web消息通知机制

[亡魂溺海] 提交于 2019-11-26 21:17:11
今天收到了一个新的需求,是完成一个安全性相对较高的财务系统,大体思路是给用户的帐号充值,其实就是用户表的一个字段修改工作;安全性主要是体现在 1. 任何交易过程均进行相关记录; 2. 并发交易时程序健壮性保证; 3. 交易过程出现在非正常现象(停电,网络断掉)的处理能力; 4. 防止黑客攻击; 对于第一个,那就是简单的任何数据都要存档可以解决;第二个由于系统同时对一个记录做修改的并发量不会太大,用普通的事物可以实现;第四个也可以通过sql参数过滤来实现; 回过头来看第3个 发现问题了,貌似不是很好处理; 仔细想了一下,在客户浏览过程中,出现非正常现象的无非是客户端出现或者服务器端出现; 咱们在这里就分析下; 1. 如果在客户端发生了,在假设客户现在没有提交成功呢,就不如说客户已经点了按钮了,浏览器也正要去请求,突然大事不好!断电了,这个请求就没有成功的发送过去,即服务器端没有正常的接受到;那这个时候怎么办呢,客户点按钮了,服务器没有接受到请求,所有的操作都没有执行,这时服务器就没有必要通知客户端该事件的执行情况了; 2. 如果说客户已经提交成功了,即服务器接收到了客户端的请求,用户正在客户端等反馈结果呢,突然大事不妙了;这时候客户就郁闷了,你这次到底执行成功了没有啊!针对这个情况,感觉服务器端得把这次事件的执行结果送给这个用户,要不然客户得一直郁闷

面试:Handler机制话术

做~自己de王妃 提交于 2019-11-26 16:02:48
Handler , Message , looper 和 MessageQueue 构成了安卓的消息机制, handler 创建后可以通过 sendMessage 将消息加入消息队列,然后 looper 不断的将消息从 MessageQueue 中取出来,回调到 Hander 的 handleMessage 方法,从而实现线程的通信。 从两种情况来说,第一在 UI 线程创建 Handler, 此时我们不需要手动开启 looper ,因为在应用启动时,在 ActivityThread 的 main 方法中就创建了一个当前主线程的 looper ,并开启了消息队列,消息队列是一个无限循环,为什么无限循环不会 ANR? 因为可以说,应用的整个生命周期就是运行在这个消息循环中的,安卓是由事件驱动的, Looper.loop 不断的接收处理事件,每一个点击触摸或者 Activity 每一个生命周期都是在 Looper.loop 的控制之下的, looper.loop 一旦结束,应用程序的生命周期也就结束了。我们可以想想什么情况下会发生 ANR ,第一,事件没有得到处理,第二,事件正在处理,但是没有及时完成,而对事件进行处理的就是 looper ,所以只能说事件的处理如果阻塞会导致 ANR ,而不能说 looper 的无限循环会 ANR 另一种情况就是在子线程创建 Handler,

深入理解Android消息机制

时光毁灭记忆、已成空白 提交于 2019-11-26 15:53:23
在日常的开发中,Android 的消息机制作为系统运行的根本机制之一,显得十分的重要。 从 Handler 发送消息开始 查看源码,Handler的post、send方法最终都会走到 代码 public final boolean sendMessageDelayed(Message msg, long delayMillis) { if (delayMillis < 0) { delayMillis = 0; } return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis); } sendMessageDelayed 会走到 代码 private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) { msg.target = this; if (mAsynchronous) { msg.setAsynchronous(true); } return queue.enqueueMessage(msg, uptimeMillis); } 这里可以设置 Message 为异步消息 查看 queue 的 enqueueMessage 方法, 我们剥离出核心代码: 代码 if (p == null ||

MFC消息映射机制

萝らか妹 提交于 2019-11-26 15:01:53
1.MFC应用框架主要类之间的关系 MFC自动生成的框架中重要的类有:C…App、CMainFrame、C…Doc和C…View。 其他的类如CClassView、CFileView等都是在框架窗口(CMainFrame)上创建的面板等,不是必要的。 C…App类处理消息,将收到的消息分发给相应的对象。 CMainFrame是视图C…View的父窗口,视图C…View就显示在CMainFrame的客户区中。 视图类C…View用来显示文档类C…Doc中的数据,并根据对视图类的操作修改文档类的数据。一个视图类只能跟一个文档类相联系,而一个文档类可以跟多个视图类相联系。 2.MFC消息映射机制 窗口消息组成:消息值(无符号整数),WPARAM型参数,LPARAM型参数。 MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的 消息映射表 ,以及消息处理函数的声明和实现等代码。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。 2.1 消息分类 Windows消息分为:系统消息、用户自定义消息。 系统消息: 1.标准Windows消息。除WM_COMMAND外以 WM_ 开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。 2.命令消息。消息名为 WM_COMMAND