zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

代理模式

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");