代理模式
2023-09-14 08:56:53 时间
代理模式,重点就是这个“代理”,服务器之间存在代理,这个代理是处于服务器和客户端之间的一个服务器,当客户端发起请求之后,请求会先到达代理服务器,代理服务器代替客户端去请求服务器,然后,服务器将结果返回给代理服务器,最后,代理服务器再将结果返回给客户端。
我们使用的VPN就是一个代理,如果我们不使用代理,直接访问google,那么,因为google在中国已经被屏蔽了,那么,就不能成功访问google。但是如果使用代理,有一个服务器,这个服务器没有被中国屏蔽,并且可以访问google的话,那么我们可以将请求转发给这个代理服务器,然后代理服务器代替客户端去请求,然后google将结果返回给代理服务器,代理服务器再将结果返回给客户端,实现客户端能够“间接访问”google。
平时,我们使用主从数据库的时候,读操作会使用从库,而写操作都是使用主库。
不使用代理模式的实现
<?php //更新操作,连接主库 $master_ip = "192.168.1.2"; $master = new PDO("mysql:host={$master_ip};dbname=MyDb", "root", "root"); $master->exec("update stu set gender='male' where id='4'"); //查找操作,连接从库 $slave_ip = "192.168.1.3"; $slave = new PDO("mysql:host={$slave_ip};dbname=MyDb", "root", "root"); $res = $slave->query("select * from stu");
上面的代码,好像并不怎么麻烦,但是吧,还是觉得挺麻烦的,因为每次进行数据库操作的时候,都要去设置连接主库还是从库。
虽然可以使用工厂模式,很简单的返回一个主库连接或者从库连接,但是,在这一层上,还是在手动的选择连接。
使用代理模式
1、创建一个代理类Proxy。
2、进行数据库操作的时候,直接实例化一个代理类的对象,然后将要进行的操作告诉代理类即可,不用关心操作是怎么执行的,因为proxy代理类中已经封装好了。
<?php class Proxy { private $master_ip = "192.168.1.2"; private $slave_ip = "192.168.1.3"; public function runSQL($sql) { $action = substr($sql, 0, 6); if($action == "select") { $this->slave($sql); } else { $this->master($sql); } } public function master($sql) { $master = new PDO("mysql:host={$this->master_ip};dbname=MyDb", "root", "root"); $master->exec($sql); } public function slave($sql) { $slave = new PDO("mysql:host={$this->slave_ip};dbname=MyDb", "root", "root"); $res = $slave->query($sql); } } $proxy = new Proxy(); //执行查操作 $proxy->runSQL("select * from stu"); //执行更新操作 $proxy->runSQL("update stu set gender='female' where id=1");
相关文章
- cglib动态代理实现原理_java设计模式之代理模式
- JavaScript 设计模式 —— 代理模式
- Nginx请求直接代理与间接代理配置
- Golang(十二)TLS 相关知识(三)理解并模拟简单代理
- apache负载均衡配置_apache反向代理配置
- 代理IP如何助力电商业务开展?
- 动态代理IP能够帮助开展哪些业务?
- 代理IP如何助力企业运营?
- Web代理(HTTP代理)
- nginx反向代理和正向代理的区别是什么_nginx负载均衡的三种方式
- 代理模式(Proxy)
- 转发“Istio共享代理新模式Ambient Mesh”
- Java设计模式之代理模式
- Python 多线程爬取西刺代理
- 隧道代理如何测试访问网站的响应时间?
- 【GoF 23】篇5:代理模式
- 【设计模式】代理模式 ( 代理模式结构 | 客户端 | 主题对象 | 被代理对象 | 代理对象 )
- ASEMI代理ADAU1979WBCPZ原装ADI车规级ADAU1979WBCPZ
- Java设计模式之代理模式详解编程语言
- 深入探讨 Linux 网关代理的实现原理与应用技巧(linux网关代理)
- Linux环境下透明代理无障碍上网(linux透明代理)
- 如何优雅地使用代理管理Linux系统(代理linux)
- 引领未来的Oracle代理经销商(oracle代理经销商)
- 探究Oracle代理哪家最为可靠(oracle代理哪家最好)
- 弹性伸缩Redis集群代理模式实现(redis集群代理模式)
- c#代理模式
- Python使用代理抓取网站图片(多线程)