消息机制

HTTP请求的缓存(Cache)机制

我的未来我决定 提交于 2019-12-27 06:06:14
原文地址:http://small.aiweimeng.top/index.php/archives/58.html 先来一张图: #### 下面简单的来描述一下HTTP Cache机制 : 当资源资源第一次被访问的时候,http status返回200,在头部携带当前资源的描述信息,eg: 最后修改的时间:```Last-Modified``` 资源状态唯一标识:```Etag``` 资源在客户端缓存的过期时间:```Expires``` 同时浏览器会将资源缓存到cache目录,并保存文件描述信息。 当客户端第二次请求资源时,会先检查cache目录中是否含有该资源,如果有,并且还没到Expires设置的时间, 即文件还没有过期,那么此时客户端将直接从Cache目录中读取文件,而不再发送请求 如果资源已经过期,客户端会发送一次http请求到服务器,同时在header携带上次修改的时间: ```text If-Modified-Since Thu, 26 Nov 2009 13:50:19 GMT If-None-Match "8fb8b-14-4794674acdcc0" ``` #### 为什么会返回上一次的信息呢? web服务器在接收到请求时,会先解析header里面的信息,然后校验头部信息。 如果该资源文件从上次时间到现在都没有修改或者Etag信息没有变化,

Windows消息机制

隐身守侯 提交于 2019-12-27 00:09:50
Windows消息机制 Windows 操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的。如果不理解 Windows 消息处理机制,肯定无法深入的理解 Windows 编程。可惜很多程序员对 Windows 消息只是略有所闻,对其使用知之甚少,更不了解其内部实现原理,本文试着一步一步向大家披露我理解的 Windows 消息机制。可以说,掌握了这一部分知识,就是掌握了 Windows 编程中的神兵利器,灵活运用它,将会极大的提高我们的编程能力。 一、 消息概述 Windows 窗体是怎样展现在屏幕上的呢?众所周知,是通过 API 绘制实现的。 Windows 操作系统提供了一系列的 API 函数来实现界面的绘制功能,例如: ² DrawText  绘制文字 ² DrawEdge  绘制边框 ² DrawIcon  绘制图标 ² BitBlt 绘制位图 ² Rectangle  绘制矩形 ² … 再复杂的程序界面都是通过这个函数来实现的。 那什么时候调用这些函数呢?显然我们需要一个控制中心,用来进行“发号施令”,我们还需要一个命令传达机制,将命令即时的传达到目的地。这个控制中心,就是一个动力源,就像一颗心脏,源源不断地将血液送往各处。这个命令传达机制就是 Windows 消息机制, Windows 消息就好比是身体中的血液,它是命令传达的使者。

windows消息机制与实例

六眼飞鱼酱① 提交于 2019-12-27 00:09:24
windows发送窗口消息   所需工具:spy++,visual studio 2017,c#语言    技术路线:首先通过spy++获得所要操纵的窗口的句柄,函数的原型声明为:   [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);   此函数获得目标窗口的句柄,如果要获得某个子窗口的句柄,通过以下函数可获得:   [DllImport("User32.dll ")] public static extern IntPtr FindWindowEx(IntPtr parent, IntPtr childe, string strclass, string FrmText);   对目标窗口的操作(发送指令),使用的函数原型如下:   [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);   我通过SendMessage函数发送的是绘图动作,具体包括鼠标的down,move,up   另一个发送消息的函数

最清晰的ios消息推送机制教程

不羁的心 提交于 2019-12-25 16:26:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 研究了一下Apple Push Notification Service,实现的很简单,很环保.原理如下 财大气粗的苹果提供了一堆服务器,每个ios设备和这些服务器保持了一个长连接,ios版本更新提示,手机时钟校准什么的都是通过这个连接. 苹果把这个长连接开放出来给大家推送消息用,很积德,因为这是个全球服务,几十亿台ios设备,服务器少说也需要上万台,还没有钱可以赚. andorid的爸爸就不做这个,于是各个app为了发消息,只能直接拼命赖在后台维持一个长连接,电就是这样被耗光的 苹果提供消息服务简称为APNS,只是是长连接机器的一部分,你要向你的用户发消息,必须通过apns中转,你写程序发给它,它转发给你的手机,你的推送程序和用户手机没有直接联系 消息推送不支持群发,只能一个一个发.如果你的App有100万个用户,要发消息怎么办? 一个一个的发呗,发100万次.消息包大概包括两部分:标示用户手机的id(32个字节)+消息体(<=256Bytes),消息体是json字符串,传输过程用ssl加密的 标示用户手机的ID 叫做 device tokens,每个手机都不一样, deviceToken非常重要 device tokens device tokens每个机器都不一样,比较独一无二,但是不是硬件码

RabbitMQ的消息确认机制

三世轮回 提交于 2019-12-25 14:30:41
一、RabbitMQ消息确认机制 RabbitMQ的消息确认有两种: 1、对生产端发送消息的确认。这种是用来确认生产者将消息发送给交换器,交换器传递给队列的过程中,消息是否成功投递。发送确认分为两步,一是确认是否到达交换器,二是确认是否到达队列。 2、对消费端消费消息的确认。这种是确认消费者是否成功消费了队列中的消息。 二、RabbitMQ对生产端发送消息的确认 rabbitmq对生产端发送消息的确认分为事务和实现confirm机制。不过一般不使用事务,性能消耗太大。对生产端的confirm机制参见: https://www.cnblogs.com/alan6/p/11483419.html 三、消费端消费消息后对RabbitMQ的确认 为了保证消息能可靠到达消费端,RabbitMQ也提供了消费端的消息确认机制。消费者在声明队列时,可以指定noAck参数,当noAck=false时,RabbitMQ会等待消费者显式发回ack信号后才从内存(和磁盘,如果是持久化消息的话)中移去消息。否则,RabbitMQ会在队列中消息被消费后立即删除它。 采用消息确认机制后,只要令noAck=false,消费者就有足够的时间处理消息(任务),不用担心处理消息过程中消费者进程挂掉后消息丢失的问题,因为RabbitMQ会一直持有消息直到消费者显式调用basicAck为止。 消费端消息的确认分为:自动确认

AHandler AMessage ALooper消息机制

巧了我就是萌 提交于 2019-12-22 17:18:57
AHandler AMessage ALooper消息机制 AHandler AMessage ALooper消息机制 1.主要类 2.消息类型 3.模型简介 4.代码分析 4.1 初始化 4.2 普通消息使用流程 4.3 需要答复的消息使用流程 AHandler AMessage ALooper消息机制 AHandler是Android native层实现的一个异步消息机制,在这个机制中所有的处理都是异步的,将变量封装到一个消息AMessage结构体中,然后放到队列中去,后台专门有一个线程ALooper会从这个队列中取出消息然后分发执行,执行函数就是AHandler实例的onMessageReceived。 1.主要类 主要的涉及的有以下三个类 AMessage 消息类,用于构造消息,通过post方法投递出去给ALooper ALooper 轮询类,用于保存消息队列,然后将消息发送到对应的AHandler AHandler 处理类,用于实际消息的处理 2.消息类型 发送的消息按照是否需要答复,分为两种 普通消息 需答复消息 3.模型简介 普通消息 被Post到消息队列,Looper不断的从队列中取出消息并分发给相应的Handler处理。如果是 需答复消息 的话使用PostAndAwaitResponse,Handler处理完以后通过postReply将消息返回给发送方

MFC消息映射机制

你。 提交于 2019-12-20 16:26:35
Windows应用程序是消息驱动的。在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应。 什么是消息 窗口消息一般由三个部分组成:1.一个无符号整数,是消息值;(2)消息附带的WPARAM类型的参数;(3)消息附带的LPARAM类型的参数。其实我们一般所说的消息是狭义上的消息值,也就是一个无符号整数,经常被定义为宏。 什么是消息映射机制 MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。SDK编程时需要在窗口过程中一一判断消息值进行相应的处理,相比之下MFC的消息映射机制要方便好用的多。 Windows消息分类 先讲下Windows消息的分类。Windows消息分为系统消息和用户自定义消息。Windows系统消息有三种: 标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。 命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。

sip协议的超时机制

我的梦境 提交于 2019-12-20 10:24:51
0、前言: 在讲解sip协议的超时机制之前,先简单地介绍一下sip协议中的message、dialog、session 和 transaction (1)M essages(消息) 消息是在服务器和客户端之间交换的独立文本,有两种类型的消息,分别是请求(Requests)和响应(Responses)。 (2)Dialog(对话) 对话是两个UAs(user agent) 之间持续一段时间的端到端(peer-to-peer)的SIP 关系.。一个对话由一个Call-ID、一个local tag 和 一个remote tag来标识,对话过去也叫做 "call leg"。dialog的建立是收到UAS的响应(To tag)时开始建立的。收到180响应时建立dialog叫做早期对话(early dialog),收到2XX的应答开始才是真正的dialog建立。 当UA发送初始INVITE请求后,只有接收到失败响应才有可能建立DIALOG。通过Callid、From域中的tag参数和To域中的tag参数来唯一标识DIALOG。 From域中的参数由主叫添加,To域中的参数由被叫添加。 (3)Transaction(事务) 事务发生于客户端和服务器端之间,包含从客户端发出请求给服务器,到服务器响应给客户端的最终消息(non-1xx message)之间的所有消息.。如果请求是一个"Invite

MQ常问的问题

夙愿已清 提交于 2019-12-19 16:42:07
1:为什么使用MQ? 主要是:解耦、异步、削峰。 (1)解耦:A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃…A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。如果使用 MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费。如果新系统需要数据,直接从 MQ 里消费即可;如果某个系统不需要这条数据了,就取消对 MQ 消息的消费即可。这样下来,A 系统压根儿不需要去考虑要给谁发送数据,不需要维护这个代码,也不需要考虑人家是否调用成功、失败超时等情况。 就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦。 (2)异步:A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库要 3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 3 + 300 + 450 + 200 = 953ms,接近 1s,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求。如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中

Redis发布订阅机制

╄→гoц情女王★ 提交于 2019-12-18 01:30:54
1. 什么是Redis Redis 是一个开源的内存 数据库 ,它以键值对的形式存储数据。由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也提供了持久化存储机制,将数据以某种形式保存在文件中,每次重启时,可以自动从文件加载数据到内存当中。 Redis的 架构 包括两个部分:Redis Client和Redis Server。Redis客户端负责向服务器端发送请求并接受来自服务器端的响应。服务器端负责处理客户端请求,例如,存储数据,修改数据等。 Redis通常用作数据库,缓存以及消息系统。 2. Redis发布订阅 2.1 Redis发布订阅架构 Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。 2.2 Redis发布订阅功能 (1)发送消息 Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。 (2)订阅某个频道 Redis采用SUBSCRIBE命令订阅某个频道,其返回值包括客户端订阅的频道