科技新闻

ios消息机制

谁说我不能喝 提交于 2020-03-05 03:23:54
消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解。今天就花些时间,把消息机制原理重头到尾好好过一遍。 iOS 提供了一种 "同步的" 消息通知机制,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。 这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,这种消息广播机制是典型的“Observer”模式。 这个要求其实也很容易实现. 每个运行中的application都有一个NSNotificationCenter的成员变量,它的功能就类似公共栏. 对象注册关注某个确定的notification(如果有人捡到一只小狗,就去告诉我). 我们把这些注册对象叫做 observer. 其它的一些对象会给center发送notifications(我捡到了一只小狗). center将该notifications转发给所有注册对该notification感兴趣的对象. 我们把这些发送notification的对象叫做 poster 消息机制常常用于在向服务器端请求数据或者提交数据的场景,在和服务器端成功交互后,需要处理服务器端返回的数据,或发送响应消息等,就需要用到消息机制

Android 子线程间通信

时光总嘲笑我的痴心妄想 提交于 2020-03-05 01:53:18
1.在android中我们平时处理的都是子线程与主线程间的通信,采用的方法是利用android中的消息循环机制,说白了就是利用Handler 而子线程与子线程的通信也可以用到Handler,也可以通过全局变量来进行通信 2.消息循环机制就不说了,由于主线程在应用启动的时候系统就给它生成了Looper , MessageQueue等消息循环的东西,所以每次子线程 可以直接往主线程发送message。而子线程是不会自动生成Looper的,就要调用Looper.prepare();方法来为该子线程生成Looper, 生成后调用Loopre.loop()来启动消息队列,再在子线程中定义自己的Handler,其他子线程可以调用该Handler来进行,子线程间的通信了。 3.示例代码: 子线程一:    1       new Thread(new Runnable() { 2 3 @Override 4 public void run() { 5 String msg; 6 Looper.prepare(); 7 8 childHandler = new Handler() { 9 @Override 10 public void handleMessage(Message msg) { 11 super.handleMessage(msg); 12 13 System.out

维吉尼亚加密法

一笑奈何 提交于 2020-03-05 01:19:52
维吉尼亚加密法 使用超过一组替代加密,也称为多表替代加密法。 密钥是一系列字母,例如英文单词。 加密方法就像在相同的消息上使用多个凯撒加密法。 算法大意 例如用 "PIZZA"作为密钥 第一个子密钥是P 二个子密钥是I 三是Z 四是Z 五是A 用第1个来加密第1个明文字母,第2个加密第2个明文字母,以此类推 到了第6个明文字母时回过头来用第1个子密钥加密。 例如: 加密消息为 Common sense is not so common COMMONSENSEISNOTSOCOMMON PIZZAPIZZAPIZZAPIZZAPIZZ C是数字2 P是数字15 所以加密出来是17® 密文: Rwlloc admst qr moi an bobunm 密钥字母越多,加密后越能抵挡暴力破解攻击. 所以密码可以是任何字母组合. 代码实例 LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' def encryptMessage ( key , message ) : # 加密 return translateMessage ( key , message , 'encrypt' ) def decryptMessage ( key , message ) : # 解密 return translateMessage ( key , message ,

RabbitMQ学习总结(3)——入门实例教程详解

落花浮王杯 提交于 2020-03-05 01:09:39
一、起航 本章节,柯南君将从几个层面,用官网例子讲解一下RabbitMQ的实操经典程序案例,让大家重新回到经典“Hello world!”(The simplest thing that does something )时代,RabbitMQ 支持N多种客户端(client),这里无法一一讲解,暂定java client,有时间的情况下,在弥补一下。 事先,先普及一下图标(我们会在下面的事例中,会大量用到,所以先普及一下,便于识别,最终更好理解事例的含义) 1、图标概念 ① producting(生产者):在程序中 发送消息的一端,我们暂且称之为 生产者,在这里用“p”表示 ② queue(队列):队列是一个邮箱的名字。它住在RabbitMQ。尽管消息流经RabbitMQ和您的应用程序,他们只可以存储在一个队列中。队列是不受任何限制,它可以储存尽可能多的信息(按你兴趣来了),它本质上是一个无限缓冲区。许多生产商可以发送消息到一个队列,许多消费者可以尝试接收数据从一个队列。 ③ consuming(消费者):消费者和生产者是对应的,较为相似的意思;在这里,我用“C”表示 2、The Java client library RabbitMQ 中 AMQP这是一个开放的、通用的协议消息。有许多客户AMQP在许多不同的语言。我们将使用提供的Java客户机RabbitMQ。 我们需要下载

WebAPI-处理架构

孤街醉人 提交于 2020-03-05 00:52:41
带着问题去思考,大家好! 问题1:HTTP请求和返回相应的HTTP响应信息之间发生了什么? 1:首先是最底层,托管层,位于WebAPI和底层HTTP栈之间 2:其次是 消息处理程序管道层,这里比如日志和缓存。OWIN的引用是将消息处理程序管道的一些功能下移到栈下端的OWIN中间件了。 3:控制器处理,HTTP响应,参数的验证和绑定。 托管层 首先是人生三大哲学问题; 1:是WebAPI和底层HTTP基础结构的接口,分三类(Windows进程,[服务啊,控制台啊]&Web托管[Web hosting,IIS]&OWIN的兼容服务器[Katana]) 2:它在架构最底层,托管层,位于WebAPI和底层HTTP栈之间 3:它的职责是负责API托管 比如:ASP.NET管道。HttpListener( HTTP 协议侦听器, https://docs.microsoft.com/zh-cn/dotnet/api/system.net.httplistener?redirectedfrom=MSDN&view=netframework-4.7.2 ).OWIN宿主。 负责创建HttpRquestMessage,返回HttpResponseMessage.转换为底层网络栈处理。 上面第二类,Web托管说下流程,托管层---HttControllerHandler---WebAPI管道

消息邮箱的概念及其作用

蹲街弑〆低调 提交于 2020-03-05 00:20:18
RTX 的消息邮箱实际上就是消息队列,通过内核提供的服务,任务或中断服务子程序可以将一个消息 (注意,RTX 消息邮箱传递的是 消息的地址 而不是实际的数据)放入到消息队列。同样,一个或者多个任 务可以通过内核服务从消息队列中得到消息。通常,先进入消息队列的消息先传给任务,也就是说,任务 先得到的是最先进入到消息队列的消息,即先进先出的原则(FIFO)。 也许有不理解的初学者会问采用消息邮箱多麻烦,搞个全局数组不是更简单,其实不然。在裸机编程 时,使用全局数组的确比较方便,但是在加上 RTOS 后就是另一种情况了。使用全局数组相比消息邮箱主 要有如下四个问题: 使用消息邮箱可以让 RTOS 内核有效的管理任务,全局数组是无法做到的,任务的超时等机制需要用 户自己去实现 使用了全局数组就要防止多任务的访问冲突,使用消息邮箱已经处理好了这个问题。用户无需担心。 使用消息邮箱可以有效的解决中断服务程序跟任务之间消息传递的问题。 FIFO 机制更有利于数据的处理。 RTX 中断方式消息邮箱的实现 RTX 中断方式消息邮箱的实现是指中断函数和 RTX 任务之间使用消息邮箱。下面我们通过如下的框 图来说明一下 RTX 消息邮箱的实现,让大家有一个形象的认识。 运行条件 创建消息邮箱,可以存放 10 个消息。 创建 1 个任务 Task1 和一个串口接收中断。 RTX 的消息读取和存放仅支持

同步和异步的执行概念和区别

心已入冬 提交于 2020-03-04 23:50:35
转载:iteye.com/blog/avaj-151724 所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。 并不是说谁好谁不好,只是同步的机制不适合在正式应用的项目当中(但自己测试还是可以的) 同步,就是实时处理,比如服务器一接收客户端请求,马上响应,这样客户端可以在最短的时间内得到结果,但是如果多个客户端,或者一个客户端发出的请求很频繁,服务器无法同步处理,就会造成涌塞。 异步,就是分时处理,服务器接收到客户端请求后并不是立即处理,而是等待服务器比较空闲的时候加以处理,可以避免涌塞。 同步和异步之分: 同步就是调用一个函数,直接函数执行完了才返回到调用函数 异步就是被调用函数初始化完后马上返回。 同步就是(我死心眼)我等你(给我回答),异步就是(我很忙)我不等你(给我回答) 严格的说,异步还是有两种: 一种是等,但是等的过程和同步不一样,等的时候可以做别的工作,但是程序的主线还是等待 WaitforSingleObject(hEvent,INFINTE,TRUE); 另外一种是CALLBACK方式

Android Socket通信

纵然是瞬间 提交于 2020-03-04 22:22:35
目标 Demo是通过Java ServerSocket 和 Socket 通信实现客户端 发送消息 和 发送文件 到服务器,服务器接收到 消息和文件 ,并且实现解决 inputStream.read() 的 阻塞 问题思路。 服务器端 创建ServerSocket服务器 serverSocket = new ServerSocket(port);//首先创建一个服务端口 //等待客户端的连接请求 socket = serverSocket.accept(); 等待Socket客户端连接 //等待客户端的连接请求 socket = serverSocket.accept(); final String socketAddress = socket.getRemoteSocketAddress().toString(); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(ServerActivity.this, "成功建立与客户端的连接 : " + socketAddress, Toast.LENGTH_SHORT).show(); Log.i("Lin", "成功建立与客户端的连接 : " + socketAddress); } }); 接收Socket客户端信息 为了防止接收消息时

[RK1108][Linux3.1]学习笔记 - 流媒体传输协议

余生颓废 提交于 2020-03-04 22:10:02
平台 内核版本 RK1108 Linux3.1 文章目录 流媒体服务器架构 RTSP协议 RTSP 消息 请求消息 应答消息 交互流程 RTP协议 RTP 包头格式 H.264 编码技术 RTCP协议 接收者报告 源描述包(SDES) 流媒体服务器架构 在网络带宽上传输实时的视音频流媒体数据时要求传输实时性必须远高于传输可靠性。但是,由于互联网络并不是完全的等时系统,在数据包传送的过程中可能会出现延迟、抖动或不按顺序到达的情况,这就需要在传输层之上添加额外的流媒体传输及控制协议来解决这些问题。于是 IETF 提出了 RTSP 和 RTP `RTCP 等一系列新的协议来满足实时数据的传输要求。根据这些协议的功能特点,可将它们分为数据传输协议和控制协议两部分。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304111631647.png) 在实际的 VLC`画面中各协议: RTSP 协议标准化了客户端与服务器的信令和信息交互; RTP 协议则完成了组合、分片或直接封装已编码压缩的视频数据的工作,并将之交予底层网络发送至客户端; RTCP 协议负责统计和发送数据包接收情况,辅助客户端、服务器和第三方监控系统即时应对网络拥塞,控制网络流量,提高服务质量。 网络摄像机首先采集摄像头中的视频数据,然后按帧对其进行 H.264 软件编码,最后交由

javascript异常处理

≡放荡痞女 提交于 2020-03-04 19:02:16
} 错误处理的重要性 以前, javascript 总是因为会出现奇怪的令人困惑的错误消息而知名,调试这种信息确实是一种痛苦的经历。 因此,第四版的浏览器 (IE4.0 和 Netscape4.0) 包含了一些基本的错误处理功能。不久之后, ECMA 和 ECMASCript 第三版中提出新的解决方案。 最新的 ECMAScript 添加了异常处理机制,采用了从 Java 中移植过来的模型 , 第三版用 ECMAScript 第二版中的一些保留字实现了 try…catch..finally 结构以及 throw 操作符 1.1 、早期浏览器的错误处理 早期的浏览器(如 IE3.0 )没有错误处理。函数通过返回一个无效值 ( 一般是 null 、 false 或 -1, 根据不同的函数不同 ) 来表示发生了错误,考虑以下代码: var index = findColor(colorarray,”red”); If (index==-1) alert(“ 该项不存在 ”); else alert(“ 该项的位置是: ”+index); 以上的问题在于函数 findcolor 的返回值 -1 无从判断是没有找到还是出错了。 错误和错误处理将帮助我们解决这个问题 在 javascript 引入错误处理后, web 开发人员就可以更好的对代码进行控制了。好的错误处理技术可以让脚本的开发