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开发文档 会员收费1期
Aug 14 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
ThinkPHP视图查询详解
Jun 30 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
Sep 16 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
Jan 07 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
php进程间通讯实例分析
Jul 11 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
详解PHP PDO简单教程
May 28 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脚本的10个技巧(5)
2006/10/09 PHP
PHP注释实例技巧
2008/10/03 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
javascript 获取图片颜色
2009/04/05 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
python切换hosts文件代码示例
2013/12/31 Python
Python画图学习入门教程
2016/07/01 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
消防安全检查制度
2014/02/04 职场文书
门前三包责任书
2014/04/15 职场文书
团员自我评价范文
2015/03/10 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang