当前位置: 首页 > 后端技术 > PHP

PHP程序员如何简单开发一个服务治理架构(二)

时间:2023-03-29 15:45:36 PHP

服务治理治理的硬道理就是服务。在一个公司里,有玩各种语言的程序员。如何统一管理他们开发的服务是一个问题。上一章主要讲了服务治理需要什么,如何实现。本章,我们将在上一章“肢解”一个非常重要的服务治理Thrift团队成员。你可以用它来调用其他开发语言的方法。本猿已经写好了服务治理https://github.com/CrazyCodes...Glossary解释thrift其实是一个可扩展和跨语言服务开发的软件框架。它结合了强大的软件堆栈和代码生成引擎,为构建在C++、Java、Go、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk和OCaml这些编程方面的高效服务提供了便利语言之间的无缝集成。这时,你在想?如何跨语言调用基本概念?这就需要我们说说我们强大的通信协议了。http(tcp)超文本传输??协议,正常访问浏览器看新闻或购物时必须使用。它需要客户端和服务器之间的握手。只有成功才能正常显示。中间握手的流出很复杂,各种执行解码和编码(为了方便理解,暂时想想)rpc远程过程调用协议,RPC采用client/server模式。请求者是客户端,服务提供者是服务器。首先,客户端调用进程向服务进程发送带有进程参数的调用消息,然后等待回复消息。在服务器端,进程一直处于休眠状态,直到调用消息到达。当调用消息到达时,服务器获取流程参数,计算结果,发送回复消息,然后等待下一个调用消息。最后客户端调用进程收到回复消息,得到处理结果,然后调用继续执行。rpc的优点很多,现在大家可以理解rpc通信比http通信快多了。这时候facebook和apache就厉害了。他们开发了一套基于rpc通信协议的thrift实现方法。假设你看不懂,这里就去实战吧。首先我们使用swoole等手写代码实现rpc。分为客户端和服务器来演示客户端。首先,我们新建一个客户端类来调用服务端的UserSerivce类,调用UserService类中的getUserInfo方法。$client=newClient('UserSerivce');$userInfo=$client->getUserInfo(1);var_dump($userInfo);在Client中,我们只需要做这么一件事情,使用php魔术方法__call调用一个不存在的方法classClient{protected$serviceName;公共函数__construct($serviceName){$this->serviceName=$serviceName;}公共函数__call($name,$arguments){$rpcClient=new\swoole_client(SWOOLE_SOCK_TCP);$rpcClient->connect('127.0.0.1',9503,0.5);//我们要发送的数据是事先约定好的,就像写一个开放的API$rpcClient->send(json_encode(['service'=>$this->serviceName,'action'=>$name,'params'=>$arguments[0]]));$rpcClient->close();}}此时数据通过rpc协议以json格式发送到服务器server$server=newswoole_server("127.0.0.1",9503);$server->on('connect',function($server,$fd){echo"连接打开:{$fd}\n";});$server->on('receive',function($server,$fd,$reactor_id,$data){//$data是客户端发送过来的数据,我们可以要这样做调用类,当然你必须遵守PSR-4Autoloader$request=json_decode($data,true);$className=$request['服务'];$app=new$className;$response=$app->{$request['action']}($request['params']);$server->send($fd,"Swoole:{$data}");$server->close($fd);});$server->on('close',function($server,$fd){echo"connectionclose:{$fd}\n";});$server->开始();文章PHP程序员如何简单开发服务治理架构(一)感谢周孟康https://mengkang.net/