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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
smarty实例教程
Nov 19 PHP
一个更简单的无限级分类菜单代码
Jan 16 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
Php Cookie的一个使用注意点
Nov 08 PHP
php 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
PHP排序算法的复习和总结
Feb 15 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 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/11/03 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
python格式化字符串实例总结
2014/09/28 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
Python解决八皇后问题示例
2018/04/22 Python
pycharm设置注释颜色的方法
2018/05/23 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
python采集微信公众号文章
2018/12/20 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
公司董事长助理工作职责
2014/07/12 职场文书
2014年教师节寄语
2014/08/11 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
美元符号 $
2022/02/17 杂记