代理模式

增强请求响应——代理模式

安稳与你 提交于 2020-02-10 11:57:08
写博客的目的是记录我的学习心得,方便自己以后查看,可能写的不是很高深,不是很对,欢迎各位看客留言评论~ 这篇文章记录我对web请求的理解,以及增强请求和响应的方式之一。 用户状态保持 从登录开始,当用户填写完数据并发送请求之后,我们需要到数据库去查询用户的记录进行比对,虽然在一次会话中会有很多的请求和响应,但是请求和响应是没有状态的,所以当用户登录成功之后,我们需要将用户的登录状态进行保存,一个比较古老的方案是将登录状态存在客户端的Session对象中,一种是存在客户端的Cookie中,Session的实现是基于cookie的,当我们将登录状态存到session中之后,响应给浏览器一个sessionId,客户端利用cookie的方式,将这个sessionid保存下来,下次发送请求的时候,带着这个sessionId来服务端查找数据。恢复状态。 拦截器对用户的请求做处理 当用户的请求发送过来之后,并不是第一时间就到了我们要访问的资源那里去,会先经过一个拦截器,由拦截器对数据做处理并判断是放行还是转发,当拦截器做了一些响应的处理并放行之后,请求访问完资源,做出响应之后,响应也会再一次经过这个拦截器,拦截器再做一些相应的处理。 响应回来之后会直接执行放行后面的代码~ 我的理解是,在后端,对于请求的增强和响应的增强也是通过这个拦截器来做的,但是代理模式并不是只适用于后端,它是一种思想

nginx 实现方向代理与实现负载均衡

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-09 20:31:58
一、Nginx 什么是Nginx? Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。 优点: 1、可运行linux,并有windows 移植版 2、在高并发情况下,Nginx 可支持高达50000个并发连接数的响应。 Nginx如何实现负载均衡? 1、Nginx反向代理 Nginx利用自身反向代理功能,在conf配置文件中添加反向代理地址,以代理服务器的身份接受客户端发送过来的请求,然后将请求转发给内部网络上的应用服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器,不过它只负责转发请求,不负责处理。 2、Nginx转发策略 Nginx转发请求可按照调度规则通过轮询、ip哈希、URL哈希、权重等多种方式对应用服务器做负载均衡,同时还支持后端服务器的健康检查,也就是上面讲的故障移除和恢复添加功能。 nginx 的 upstream目前支持的分配算法: 1)、轮询(默认) 每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,能自动剔除。 2)、权重 通过配置权重,指定轮询几率,权重和访问比率成正比

设计模式--代理模式

蹲街弑〆低调 提交于 2020-02-08 13:27:03
和平时开发中是用的webpack 代码请求解决跨域问题类似 主要解决: 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。 例子; 图片代理:一个很常见的代理模式的应用实例就是对大图浏览的控制。 用户通过浏览器访问网页时先不加载真实的大图,而是通过代理对象的方法来进行处理,在代理对象的方法中,先使用一个线程向客户端浏览器加载一个小图片,然后在后台使用另一个线程来调用大图片的加载方法将大图片加载到客户端。当需要浏览大图片时,再将大图片在新网页中显示。如果用户在浏览大图时加载工作还没有完成,可以再启动一个线程来显示相应的提示信息。通过代理技术结合多线程编程将真实图片的加载放到后台来操作,不影响前台图片的浏览。 使用场景: 按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。 public

Spring IOP 没用

烈酒焚心 提交于 2020-02-08 01:11:17
Spring提供了很多轻量级应用开发实践的工具集合,这些工具集以接口、抽象类、或工具类的形式存在于Spring中。通过使用这些工具集,可以实现应用程序与各种开源技术及框架间的友好整合。比如有关jdbc封装的数据访问工具Spring JDBC,有关编写单元测试的spring test包以及spring-mock,有关访问动态脚本语言的Spring Script,另外还有发送邮件的工具Spring Mail、日程及任务处理工具Spring scheduling等。 可以这么说,大多数企业级应用开发中经常涉及到的一些通用的问题,都可以通过Spring提供的一些实用工具包轻松解决 依赖注入的三种方式:(1)接口注入(2)Construct注入(3)Setter注入 控制反转(IoC)与依赖注入(DI)是同一个概念,引入IOC的目的:(1)脱开、降低类之间的耦合;(2)倡导面向接口编程、实施依赖倒换原则; (3)提高系统可插入、可测试、可修改等特性。 具体做法:(1)将bean之间的依赖关系尽可能地抓换为关联关系; (2)将对具体类的关联尽可能地转换为对Java interface的关联,而不是与具体的服务对象相关联; (3)Bean实例具体关联相关Java interface的哪个实现类的实例,在配置信息的元数据中描述; (4)由IoC组件(或称容器)根据配置信息,实例化具体bean类

代理——java

人盡茶涼 提交于 2020-02-07 20:45:49
目录 一、代理模式和静态代理 二、动态代理 三、AOP编程 一、代理模式和静态代理 代理:为目标对象提供(包装)了一个代理,这个代理可以控制对目标对象的访问。 静态代理: 代理对象持有目标对象的句柄; 所有调用目标对象的方法,都调用代理对象的方法; 对每个方法,需要静态编码(理解简单,但代码繁琐)( 所以当方法过多时最好使用动态代理 ) 一般代理对象和目标对象引用同一个接口 静态代理示例: 1.实现接口 public interface Subject{ public void request(); } 2.目标对象 class SubjectImpl implements Subject{ public void request(){ System.out.println("I am dealing the request."); } } 3.代理对象 class StaticProxy implements Subject{ //实际目标对象 private Subject subject; public StaticProxy(Subject subject){ this.subject = subject; } public void request(){ System.out.println("PreProcess"); subject.request(); System

设计模式常见面试题汇总

北战南征 提交于 2020-02-07 14:07:54
设计模式常见面试题汇总 1.说一下设计模式?你都知道哪些? 答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。 **分类** **包含** **关注点** 创建型模式 工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式 关注于对象的创建,同时隐藏创建逻辑 结构型模式 适配器模式、过滤器模式、装饰模式、享元模式、代理模式、外观模式、组合模式、桥接模式 关注类和对象之间的组合 行为型模式 责任链模式、命令模式、中介者模式、观察者模式、状态模式、策略模式、模板模式、空对象模式、备忘录模式、迭代器模式、解释器模式、访问者模式 关注对象之间的通信 下面会对常用的设计模式分别做详细的说明。 2.什么是单例模式? 答:单例模式是一种常用的软件设计模式,在应用这个模式时,单例对象的类必须保证只有一个实例存在,整个系统只能使用一个对象实例。 优点:不会频繁地创建和销毁对象,浪费系统资源。 使用场景:IO 、数据库连接、Redis 连接等。 单例模式代码实现: class Singleton { private static Singleton instance = new Singleton(); public

全面了解 Nginx 主要应用场景

好久不见. 提交于 2020-02-07 06:51:58
前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得。所以还请见谅,同时欢迎留言交流 Nginx能做什么 反向代理 负载均衡 HTTP服务器(包含动静分离) 正向代理 以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 反向代理 反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。下面贴上一段简单的实现反向代理的代码 server { listen 80 ; server_name localhost ; client_max_body_size 1024 M ; location / { proxy_pass http : / / localhost : 8080 ; proxy_set

Spring学习——【AOP】代理模式 & Spring AOP

混江龙づ霸主 提交于 2020-02-07 04:09:55
Spring AOP 文章目录 Spring AOP 代理模式 1. 静态代理 2. 动态代理 3. CGLIB代理 Spring AOP AOP 术语 通知的类型 简单实现 execution表达式 Spring 框架的一个关键组件是 面向方面的编程 (AOP)框架。面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点。跨一个应用程序的多个点的功能被称为 横切关注点 ,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。 在 OOP 中,关键单元模块度是类,而在 AOP 中单元模块度是方面。依赖注入帮助你对应用程序对象相互解耦和 AOP 可以帮助你从它们所影响的对象中对横切关注点解耦。AOP 是像编程语言的触发物,如 Perl,.NET,Java 或者其他。 Spring AOP 模块提供拦截器来拦截一个应用程序,例如,当执行一个方法时,你可以在方法执行之前或之后添加额外的功能。 例如下图: 我们可以看到,在不该变原有核心代码的情况下,我们通过aop可以实现日志的拦截,安全监测,事务处理等一系列动作。 如何在不改变原有核心代码的情况下,实现这样的效果呢?这里我们不得不提的是代理模式。 代理模式 ​ 试想一个应用场景,总裁与秘书,我们知道现实生活中总裁有很多事要做,业务繁忙,很多事情需要秘书来处理

(12)结构型模式——代理

末鹿安然 提交于 2020-02-06 13:06:11
结构型模式——代理(Proxy) 目录 结构型模式——代理(Proxy) 问题背景 解决方案 效果 缺陷 相关模式 实现 问题背景 当需要监控外界对对象的访问时,考虑使用代理。举个大家都干过的例子哈,在咱这一代小时候,互联网这东西还没这么牛X。你要约女朋友出来,却没有QQ微信电话,只能硬着头皮去她家找。然而开门的不是你女朋友,而是你老丈母娘。老丈母娘问你,叫她宝贝女儿出去干嘛。这时候,要是你说:我们约好要一起写作业,那老丈母娘肯定开开心心地把女儿交给你;但你要是说:我们约好要去开房233…… 下面,我们就用面向对象程序模拟以上场景,来介绍代理。 解决方案 首先,在上面的场景中,你扮演的就是“用户”,女朋友是被调用的“真实对象”。但是,对于你一个外部人员来说,系统(女朋友家)不允许你直接访问真实对象,想访问真实对象,必须通过代理(老丈母娘)。于是,我们得到了如下的类图: Date方法是约会,Boy要约Girl,只能调用MotherInLaw的Date方法。传入附加参数,MotherInLaw根据参数决定是否允许Boy访问Girl。同时,MotherInLaw还可以通过“引用计数”来观察自己的女儿在外边搞了多少个男人…这样,对于系统内部来说,就达到了监控访问的目的。 效果 为真实对象的访问提供了间接性,这种间接性可以实现如安全、日志、延迟加载、引用计数等附加功能。 缺陷 在上面的类图中

Nginx重要概念理解-正向代理和反向代理

人走茶凉 提交于 2020-02-06 09:09:16
Nginx是有俄罗斯人伊戈尔·赛索耶夫(Igor Sysoev)为俄罗斯访问量第二的rambler.ru站点开发的轻量级Web服务器,同时也是一个非常高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。 本文主要从正向代理,反向代理和负载均衡三个方面简单介绍Nginx的工作原理。 正向代理 正向代理也可以理解为客户端代理,Nginx代替客户端向明确的服务器发送请求,对于服务器来说客户端完全透明。如上图所示,客户机数量的多少不重要,重要的是客户机一定是知道将要访问的是哪台服务器。而且代理服务器是可以不知道客户机要访问哪里的,代理服务器可以从客户机的请求中解析出目标服务器的地址。 在生活中很多场景都可以形象的展现正向代理的例子。比如客户去某 品牌专卖店购物 ,在客户购买产品这个过程中,专卖店就是个代理的角色。对于客户而言,客户明确指明了购买哪个厂家的具体哪个产品,专卖店需要明确的去这个厂家取货就可以了。上述这样的代理模式称为正向代理。 在软件应用的场景来说FQ最能体现这个正向代理模式。正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端