科技新闻

iOS 消息传递

非 Y 不嫁゛ 提交于 2020-03-05 21:13:18
Objective-C 调用方法实际上是发送消息的过程,先判断接收者是否为空,如果不为空经历以下几步: 1、先从方法的缓存中查找,如果没找到进入下一步。 2、通过对象的isa指针找到类对象,在类对象的方法列表中查找;如果没找到就通过superclass指针逐层查找直到NSObject对象。如果还是没找到就执行方法动态解析。 3、方法动态解析调用: + (BOOL)resolveInstanceMethod:(SEL)sel 方法来为实例方法 sel 动态添加实现方法。如果没添加进入下一步。 4、重定向消息的接收者,通过 - (id)forwardingTargetForSelector:(SEL)aSelector 来返回可处理这条消息的对象。如果这个对象不响应这个消息则进入消息转发。 5、消息转发调用 - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector 和 - (void)forwardInvocation:(NSInvocation *)anInvocation 如果通过以上过程还没有处理这条消息就会发生crash( unrecognized selector sent to instance xxxx ), 接下来一步步实现 方法动态解析、重定向消息的接收者、消息转发 方法动态解析

学习RabbitMQ记录!

若如初见. 提交于 2020-03-05 21:07:26
一,什么是RabbitMQ ? AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 二 ,RabbitMQ 的推送流程 简单来说就是 消息生产者 发送消息给交换机,交换机找到和他绑定的队列 -》找到是否有消费者在监听这个队列,有就把消息发送过去。 exchanges 交换机的几种类型: 路由键介绍:队列和交换金绑定时候的一种标识。通过这个标识当我们发送信息给交换机时候带着这个路由键,系统就能够找到这个路由键下的队列。 Direct Exchage 直连型的交换机,(只发送给对应的路由键下的队列) fanoutExchage 扇形交换机 (无视路由键会发送给所有绑定在这个交换机上的队列) topic exchange

分布式事物2 基于rocketmq

梦想的初衷 提交于 2020-03-05 20:05:44
分布式事物2 基于rocketmq 从rocketmq的官网可以看到,它又以下几种消息类型: 1)发送同步消息 这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知 2)发送异步消息 异步消息通常用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应。 3)单向发送消息 这种方式主要用在不特别关心发送结果的场景,例如日志发送。 消息消费: 1)负载均衡模式 消费者采用负载均衡方式消费消息,多个消费者共同消费队列消息,每个消费者处理的消息不同 2)广播模式 消费者采用广播的方式消费消息,每个消费者消费的消息都是相同的 4)顺序消息 消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。 顺序消费的原理解析,在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。当发送和消费参与的queue只有一个,则是全局有序;如果多个queue参与,则为分区有序,即相对每个queue,消息都是有序的。 5)延时 比如电商里

HeartBeat高可用学习笔记

馋奶兔 提交于 2020-03-05 18:27:36
一、 heartbeat和KeepAlived一样都是服务器级别的,不是业务级别的。业务宕机不会切换,需要对业务做监控。 二、heartbeat消息类型: 1. 心跳消息 150字节左右,可以单播,多播和广播,控制心跳频率和故障接管等待时间。 2. 集群转换消息 1. ip-request 主机恢复正常后发送该消息要求接管的备机释放资源。 2. ip-request-resp 备机释放资源后通知主机不再拥有资源。 3. 重传请求(略)rexmit-request控制重传心跳请求 以上消息均通过UDP协议发送到/etc/ha.d/ha.cf文件中指定的端口或多播地址。 三、heartbeat的IP接管和故障转移 heartbeat是通过IP地址接管和ARP广播来转移的。 四、配置VIP,增加心跳线主机路由 route add -host 192.168.1.45 dev eth1 route add -host 192.168.1.44 dev eth1 五、centos6已经无法yum install heartbeat,需要先安装epel源。 yum install heartbeat 如果是centos5.8,一定要yum安装两遍才能成功。 六、配置 ha的yum安装默认模板文件在/usr/share/doc/heartbeat-3.0.4/目录 安装目录在/etc/ha.d

TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议

旧街凉风 提交于 2020-03-05 18:19:45
把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息。数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据信息。 1.IP协议 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。所以这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。这是后话,暂且不提 1.1.IP协议头 如图所示 挨个解释它是教科书的活计,我感兴趣的只是那八位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。

swoole(5)信号监听、热重启

非 Y 不嫁゛ 提交于 2020-03-05 18:04:04
一:信号监听 信号:由用户、系统或者进程发给目标进程的信息,以通知目标进程某个状态的改变或系统异常 信号查看:kill -l SIGHUP 终止进程 终端线路挂断 SIGINT 终止进程 中断进程 SIGKILL 终止进程 杀死进程 SIGPIPE 终止进程 向一个没有读进程的管道写数据 SIGALARM 终止进程 计时器到时 SIGTERM 终止进程 软件终止信号 SIGSTOP 停止进程 非终端来的停止信号 SIGTSTP 停止进程 终端来的停止信号 SIGCONT 忽略信号 继续执行一个停止的进程 SIGURG 忽略信号 I/O紧急信号 SIGIO 忽略信号 描述符上可以进行I/O SIGPROF 终止进程 统计分布图用计时器到时 SIGUSR1 终止进程 用户定义信号1 SIGUSR2 终止进程 用户定义信号2 SIGVTALRM 终止进程 虚拟计时器到时 swoole热重启命令: 1、kill -SIGTERM|-15 master_pid 终止Swoole程序,一种优雅的终止信号,会待进程执行完当前程序之后中断,而不是直接干掉进程 2、kill -USR1|-10 master_pid 重启所有的Worker进程 3、kill -USR2|-12 master_pid 重启所有的Task Worker进程 重启子进程、拉起子进程代码: <?php class

简述同步和异步的区别

一世执手 提交于 2020-03-05 16:25:10
同步是阻塞模式, 异步是非阻塞模式。 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返 回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去; 异步是指进程不需要一直等下去, 而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效 率。 来源: CSDN 作者: 陈迹·清欢 链接: https://blog.csdn.net/qq_36360463/article/details/104672634

RocketMq学习(四、顺序消息)

情到浓时终转凉″ 提交于 2020-03-05 15:48:21
rocketMQ通过将消息发送给指定的队列来实现顺序发送 Producer package com.wk.test.rocketmqTest.shunxu; import org.apache.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.common.message.Message; import org.apache.rocketmq.remoting.exception.RemotingException; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class Producer { public static void main(String[] args) { DefaultMQProducer

Spring Framework 简介

拟墨画扇 提交于 2020-03-05 12:05:40
Spring Framework 依赖注入、事务管理、Web应用程序、数据访问、消息传递、测试和更多的核心支持。 Tips: Spring 官网: https://spring.io/ spring framework 官网: https://projects.spring.io/spring-framework/ 0x01介绍 Spring框架提供了现代的基于java的企业应用程序在任何部署平台的综合规划和配置模型。Spring的一个关键元素是应用程序级的基础设施支持:Spring关注企业应用程序的“管道”,以便团队能够专注于应用级业务逻辑,而不必与特定部署环境不必要的联系。 0x02 功能 核心技术:依赖注入、事件、资源、国际化、验证、数据绑定、类型转换,拼写,AOP。 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问:事务、DAO支持、JDBC、ORM、编组XML。 Spring MVC Web框架和 Spring WebFlux web 框架 整合:Remoting、JMS、JCA、JMX、电子邮件、任务调度、缓存。 语言:Kotlin,Groovy动态语言。 0x03 Minimum requirements JDK 8+ for Spring Framework 5.x JDK 6+ for Spring

Redis中的订阅模式

眉间皱痕 提交于 2020-03-05 11:33:07
redis中的客户端可以订阅一个自定义的频道,接受来自该频道的消息 订阅 订阅指定频道-SUBSCRIBE SUBSCRIBE channel [channel2]... SUBSCRIBE 频道名 [频道名2]... 127.0.0.1:6379> subscribe channel1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "channel1" 3) (integer) 1 订阅匹配频道-PSUBSCRIBE 匹配模式可以订阅名称匹配符合的频道 PSUBSCRIBE channel* 代表订阅 channel 开头的频道 127.0.0.1:6379> psubscribe channel* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "channel*" 3) (integer) 1 匹配模式要注意,匹配的名称可以在以后出现,但凡是知道会有哪些频道出现,都尽量不要用这个模式,可能会在之后出现一个你没有预料到的频道的消息 发布 PUBLISH PUBLISH channel message 向特定频道发送消息 127.0.0.1:6379> publish channel3 "test channel 3"