关于事件通知机制的好处的信息

来源网友投稿 761 2023-01-26

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。
本篇文章给大家谈谈事件通知机制的好处,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享事件通知机制的好处的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

怎么通过代码实现seesionstorage和localstorage的切换

sessionStorage 和 localStorage 是HTML5 Web Storage API 提供事件通知机制的好处的,可以方便的在web请求之间保存数据。有事件通知机制的好处了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。 sessionStorage、localStorage、cookie都是在浏览器端存储的数据,其中sessionStorage的概念很特别,引入了一个“浏览器窗口”的概念。sessionStorage是在同源的同窗口(或tab)中,始终存在的数据。也就是说只要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一页面,数据仍然存在。关闭窗口后,sessionStorage即被销毁。同时“独立”打开的不同窗口,即使是同一页面,sessionStorage对象也是不同的。 Web Storage带来的好处:减少中国络流量:一旦数据保存在本地后,就可以避免再向服务器请求数据,因此减少不必要的数据请求,减少数据在浏览器和服务器间不必要地来回传递。快速显示数据:性能好,从本地读数据比通过中国络从服务器获得数据快得多,本地数据可以即时获得。再加上中国页本身也可以有缓存,因此整个页面和数据都在本地的话,可以立即显示。临时存储:很多时候数据只需要在用户浏览一组页面期间使用,关闭窗口后数据就可以丢弃了,这种情况使用sessionStorage非常方便。 浏览器本地存储与服务器端存储之间的区别其实数据既可以在浏览器本地存储,也可以在服务器端存储。 浏览器端可以保存一些数据,需要的时候直接从本地获取,sessionStorage、localStorage和cookie都由浏览器存储在本地的数据。 服务器端也可以保存所有用户的所有数据,但需要的时候浏览器要向服务器请求数据。一.服务器端可以保存用户的持久数据,如数据库和云存储将用户的大量数据保存在服务器端。二.服务器端也可以保存用户的临时会话数据。服务器端的session机制,如jsp的 session 对象,数据保存在服务器上。实现上,服务器和浏览器之间仅需传递session id即可,服务器根据session id找到对应用户的session对象。会话数据仅在一段时间内有效,这个时间就是server端设置的session有效期。 服务器端保存所有的用户的数据,所以服务器端的开销较大,而浏览器端保存则把不同用户需要的数据分布保存在用户各自的浏览器中。浏览器端一般只用来存储小数据,而服务器可以存储大数据或小数据。服务器存储数据安全一些,浏览器只适合存储一般数据。 sessionStorage 、localStorage 和 cookie 之间的区别 共同点:都是保存在浏览器端,且同源的。区别:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。存储大小限制也不同,cookie数据不能超过四k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。 sessionStorage 和 localStorage 之间的区别见上面的区别三、四 sessionStorage与页面 js 数据对象的区别页面中一般的 js 对象或数据的生存期是仅在当前页面有效,因此刷新页面或转到另一页面这样的重新加载页面的情况,数据就不存在了。而sessionStorage 只要同源的同窗口(或tab)中,刷新页面或进入同源的不同页面,数据始终存在。也就是说只要这个浏览器窗口没有关闭,加载新页面或重新加载,数据仍然存在。 cookie,容量四kb,默认各种浏览器都支持,缺陷就是每次请求,浏览器都会把本机存的cookies发送到服务器,无形中浪费带宽。 userdata,只有ie支持,单个容量陆四kb,每个域名最多可存一0个共计陆四0k数据。默认保存在C:\Documents and Settings\Administrator\UserData\目录下,保存格式为xml。关于userdata更多资料参考中国msdn.microsoft中国/library/default.asp?url=/workshop/author/behaviors/reference/behaviors/userdata.asp sessionStorage与localStorage Web Storage实际上由两部分组成:sessionStorage与localStorage。 sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。 localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。 为什么选择Web Storage而不是Cookie? 与Cookie相比,Web Storage存在不少的优势,概括为以下几点: 一. 存储空间更大:IE吧下每个独立的存储空间为一0M,其事件通知机制的好处他浏览器实现略有不同,但都比Cookie要大很多。 二. 存储内容不会发送到服务器:当设置了Cookie后,Cookie的内容会随着请求一并发送的服务器,这对于本地存储的数据是一种带宽浪费。而Web Storage中的数据则仅仅是存在本地,不会与服务器发生任何交互。 三. 更多丰富易用的接口:Web Storage提供了一套更为丰富的接口,使得数据操作更为简便。 四. 独立的存储空间:每个域(包括子域)有独立的存储空间,各个存储空间是完全独立的,因此不会造成数据混乱

事件性通知怎么保证可靠通信

生产阶段
在这个阶段,生产者将消息生产出来,并经过网络传输发送到服务器Broker端。
在这里,最常用的就是"发送-确认"机制来保证消息的可靠传递。当你的代码调用发送消息方法时,消息队列的客户端就会发送消息,服务端收到消息后会向给客户端发送一个确认响应,表明消息被收到了。客户端收到确认响应后,完成一次消息传递。如果客户端长时间没有收到确认响应,有些消息队列会重新发送这条消息,如果重发再失败,会以返回值或者异常的方法通知用户。
你在编写发送消息代码的时候,只要正确处理返回值或者捕捉异常就能保证消息不会丢失。同步发送时,只要加上try catch捕捉即可。异步发送在回调函数中检查。
2. 存储阶段
在存储阶段只要broker在正常运行,就能保证消息不会丢失,但是如果进程死掉了,或者服务器宕机了,还是有可能出现消息丢失的。
如果对消息的可靠性要求比较高,可以通过配置Broker参数来避免因为宕机丢消息。
对于单个节点的broker,需要配置broker参数,在收到消息后,将消息写入磁盘再给客户端发送确认响应。如果broker是多个节点组成的集群,那么可以配置成至少将消息发送到2个以上的节点,再给客户端发送确认响应,当单个broker宕机时,其他的broker可以替代宕机的broker,也不会发生消息丢失。
​3. 消费阶段
​ ​消息队列在消费阶段采用了和生产阶段相同的确认机制。你需要注意的是,不要受到消息以后立即发送确认响应,而是应该在业务逻辑处理完成后再发送。
​我们在上诉三个阶段做出正确的配置和编写代码,配合消息队列的可靠性机制,就能保证消息的可靠性传递。我们来总结一下:
在生产阶段:正确的捕获没有接受到确认响应的异常,并做出相应的处理
在存储阶段:正确的配置消息队列相关参数,选择刷盘或者将消息至少发送至两个节点再发送确认响应
在消费阶段:收到消息以后,先进行业务逻辑处理,再发送消费确认响应
​思考:如果确认响应在网络传输过程中丢失,也会导致重发消息。也就是说,无论是broker还是consumer都是有可能收到重复消息的。如何处理这一些重复消息才能不能影响到正常的业务逻辑呢?

25 NotificationListenerService通知机制

Android应用除了组件和窗口管理,还有通知显示也是非常重要的,通知是应用界面之外向用户显示的界面。 NotificationListenerService继承于Service,该服务是为了给app提供获取通知的新增和删除事件,通知的数量和内容等相关信息的途径,该类的主要方法:

常见的Flags:

关于前台服务是用户可感知的,前台服务需要显示一个通知,比如后台播放音乐。

创建通知过程,此处的PendingIntent是当通知被点击后的跳转动作,可以是启动Activity、Service,或者发送Broadcast。 对于更新通知只需要发送notifyID相同的通知即可。

除了调用NotificationManager的cancel()或者cancelAll(),也可

点击查看大图

点击查看大图

可见,通知发送与通知取消流程的步骤一直对齐,这里就只介绍通知发送流程,通知取消流程就不再介绍。

[- NotificationManager.java]

在App端调用NotificationManager类的notify()方法,最终通过binder调用,会进入system_server进程的 NotificationManagerService(简称NMS),执行enqueueNotificationWithTag()方法。

[- NotificationManagerService.java]

这个过程主要功能:

接下来看看WorkerHandler到底运行在哪个线程,这需要从NMS服务初始化过程来说起:

[- SystemServer.java]

该过程运行在system_server进程的主线程。

[- SystemServiceManager.java]

该过程先创建NotificationManagerService(简称NMS),然后再调用其onStart方法。

[- NMS.java]

到此,我们可以得知onStart()过程创建的mHandler运行在system_server的主线程。那么上面的执行流便进入了 system_server主线程。

[- NMS.java]

这里的mListeners是指NotificationListeners对象

[- NMS.java]

这里是在system_server进程中第二次采用异步方式来处理。

此处的listener来自于ManagedServiceInfo的service成员变量,listener数据类型是NotificationListenerWrapper的代理对象,详见第三大节。 此处sbnHolder的数据类型为StatusBarNotificationHolder,继承于IStatusBarNotificationHolder.Stub对象,经过binder调用进入到systemui进程的 便是IStatusBarNotificationHolder.Stub.Proxy对象。

[- NotificationListenerService.java]

此时运行在systemui进程,sbnHolder是IStatusBarNotificationHolder的代理端。 此处mHandler = new MyHandler(getMainLooper()),也就是运行在systemui主线程的handler

[- NotificationListenerService.java]

此处调用NotificationListenerService实例对象的onNotificationPosted()

[- BaseStatusBar.java]

此处的mHandler便是systemui的主线程

[- PhoneStatusBar.java]

如果创建的通知视图为空则会直接返回。

[- BaseStatusBar.java]

[- SystemServer.java]

[- SystemServer.java]

启动服务SystemUIService,运行在进程com.android.systemui,接下来进入systemui进程

[- SystemUIService.java]

服务启动后,先执行其onCreate()方法

[- SystemUIApplication.java]

此处以SystemBars为例来展开

[- SystemUIApplication.java]

[- SystemBars.java]

[- SystemBars.java]

config_statusBarComponent的定义位于文件config.xml中,其值为PhoneStatusBar。

[- PhoneStatusBar.java]

[- BaseStatusBar.java]

[- NotificationListenerService.java]

经过binder调用,向system_server中的NMS注册监听器

[- NMS.java]

mListeners的对象类型为ManagedServices。此处的INotificationListener便是NotificationListenerWrapper的代理对象

[- ManagedServices.java]

[- ManagedServices.java]

[- ManagedServices.java]

可见,前面的listener的对端便是运行在systemui中的NotificationListenerWrapper的代理对象。

整个过程涉及到3个Handler都是运行在system_server的主线程:NMS的mHandler,NLS的mHandler以及BaseStatusBar的mHandler。

一次通知发送的过程,在system_server进程里面经过了步骤[2.3],[2.4]的两次异步调用,进入systemui进程,也经历[2.6],[2.8]共两次异步调用。 本身是异步调用,再进过一次异步意义并不大。

另外,这里需要注意的是前台服务也会显示通知,该通知是为了提升服务的优先级,并且让用户可感知该服务的存在,以防止进程被杀,比如音乐播放。 对于常规的通知可通过点击通知(允许清除的通知)或者点击通知栏的清除按钮来清除。

5种常见的消息传递机制及其区别

常见的消息传递方法有以下5种

第一种:KVO对象属性改变时的通知机制,当对象的某个属性发生变化,进行某项操作的时候,就可以使用KVO的消息传递。使用KVO的前提:消息的观察者需要知道谁是消息的发送者;观察者需要知道发送者的生命周期,因为KVO不会对self进行强引用,如果观察者的生命周期结束了,self被释放,所以添加的监听需要被移除。

第二种:通知机制广播消息,要在两个不相关的模块进行消息传递时,可以使用通知,不需要知道发送者是哪个,同时通知可以发送任何的消息,但是通知的消息传递是单向的,我们不能回复一个通知。

第三种:Target-Action:是UI事件的消息传递方式,target-Action 在消息的发送者和接收者之间建立了一个关系。消息的接收者和发送者互不知道对方。如果 target 是 nil,action 会在响应链中被传递下去,直到找到一个响应它的对象。在 iOS 中,每个控件甚至可以和多个 target-action 关联。但是发送的消息不能携带自定义的信息。

第四种:Block 通常可以完全替代 delegation 消息传递机制的角色,不过使用block要注意避免出现循环引用。

第五种:delegate 发送者需要知道接受者是哪个,代理可以自定义任何的方法,按照自己的需求传递信息,可以用方法参数来传递消息内容,delegate 可以通过返回值的形式来给发送者作出回应。

ObjC 中国 - 消息传递机制 关于事件通知机制的好处和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 事件通知机制的好处的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、事件通知机制的好处的信息别忘了在本站进行查找喔。
上一篇:AI正从“感知智能”走向“认知智能”知识库
下一篇:借助语音控制技术,智能家居系统将会变得更加智能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~