PHP程序员简单的开展服务治理架构操作详解(二)


Posted in PHP onMay 14, 2020

本文实例讲述了PHP程序员简单的开展服务治理架构操作。分享给大家供大家参考,具体如下:

服务治理 治理的绝笔是服务,在一家公司有玩各种语言的程序员,如何去统一管理他们开发的服务,这是一个问题。

上一章主要讲了下服务治理需要什么,如何实现,这章我们详细的“肢解”一下服务治理的一个非常重要的组员 Thrift

上一章说明他的时候是这样写的

暂时大可理解为可以通过它去调用其他开发语言的方法
本猿人已经写好的服务治理 https://github.com/CrazyCodes/Service-Govern

名词解释

thrift其实是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

这个时候你就疑惑了?,如何跨语言调用

基本概念

如何调用这就需要讲一下我们强大的通信协议了。

http (tcp)

超文本传输协议,正常访问浏览器啥看新闻、购物的时候必定使用,需要客户端和服务端握手?成功才可以正常显示,这中间握手的流出很复杂,执行各种各样的解码编码(为了方便理解,暂时这么想吧)

rpc

远程过程调用协议,RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供者就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

rpc的优势很多,现在你大可理解为rpc通信要比http通信快很多就是了。

这个时候facebook和apache就厉害了,它们基于rpc通信协议开发出了一套thrift

实现方法

  • 上面假设你都没看懂,这里我们实战下。
  • 首先rpc我们通过使用swoole来实现,其他的手码。
  • 分为客户端和服务端做下演示

客户端

首先我们new一个client类,去调用服务端的UserSerivce这个类,并且调用UserService类中的getUserInfo方法。

$client = new Client('UserSerivce');
$userInfo = $client->getUserInfo(1);

var_dump($userInfo);

Client中我们只需要干这样的一件事,使用php魔术方法__call去调用一个不存在的方法

class Client{
 protected $serviceName;
   
 public function __construct($serviceName){
  $this->serviceName = $serviceName;
 }
 public function __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 = new swoole_server("127.0.0.1", 9503);
$server->on('connect', function ($server, $fd){
 echo "connection open: {$fd}\n";
});
$server->on('receive', function ($server, $fd, $reactor_id, $data) {
 // $data 则就是客户端发送过来的数据,我们可以这样做来做到去调用类,当然你必须遵守PSR-4 Autoloader
 $request = json_decode ($data, true);
 $className = $request['service'];
 $app  = new $className;
 $response = $app->{$request['action']}($request['params']);
 
 $server->send($fd, "Swoole: {$data}");
 $server->close($fd);
});
$server->on('close', function ($server, $fd) {
 echo "connection close: {$fd}\n";
});
$server->start();

往期文章

  • PHP程序员如何简单的开展服务治理架构(一)

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP和MySQL保存和输出图片
Oct 09 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
PHP批量删除jQuery操作
Jul 23 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 #PHP
PHP程序员必须知道的两种日志实例分析
May 14 #PHP
Laravel框架集合用法实例浅析
May 14 #PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 #PHP
Laravel框架源码解析之入口文件原理分析
May 14 #PHP
Laravel框架源码解析之反射的使用详解
May 14 #PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 #PHP
You might like
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php和asp语法上的区别总结
2019/05/12 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
python中的字典操作及字典函数
2018/01/03 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
工艺员岗位职责
2014/02/11 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
python 中的@运算符使用
2021/05/26 Python
python 网络编程要点总结
2021/06/18 Python
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技