专业编程基础技术教程

网站首页 > 基础教程 正文

php项目拆分rpc选型(php 项目)

ccvgpt 2024-07-19 12:46:22 基础教程 13 ℃

背景:团队中所有的项目都是php开发的,且都是用的php-fpm。总共目前有6项目,这几个项目的核心数据都是在一个数据库中,现在如果改动一个小功能,可能这几个项目都会去改动,效率低下。所以考虑将一些公共的服务和数据独立拆分出来,有统一的读和写入口。

问题:那这个6个项目是怎么相互调用的呢?新项目又怎么调用呢?

php项目拆分rpc选型(php 项目)

创建一个和这6个项目目录平级的新的项目(codebase),这个项目是一个公共的调用项目。其他所有项目index.php都include codebase中的autoload.php文件。为什么没有选择用composer的方式将新的codebase加入到项目中。因为上线太麻烦了,在codebase中修改一个功能,需要协调6个项目组中的人去composer update ,同时去上线、测试。这个流程就太漫长了,也不满足我们设计这套方案的初衷。目前只要是新功能都会产生一个独立的项目,如果这几个端口和新功能有关系,那么都是通过rpc的方式来调用。

协议选择:protobuffer、thrift、json-rpc、yar。对于Pb和thrift我感觉还是重了一点,团队中至少目前跨语言还没有出现。json-rpc没有找到运用得比较广泛的应用、且关注的人比较少。所以最后选择鸟哥的yar。

yar是一个php的扩展,需要安装,安装方法参考最后链接说明。

rpc的优势是可以调用本地方法一样调用远程的方法,且可以捕获异常,非常方面。

客户端:需要注意的是client设置超时时间YAR_OPT_TIMEOUT,单位为秒。

以下是copy鸟哥的说明:

<?php

$client = new  Yar_Client("http://host/api/");

$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);

$client->SetOpt(YAR_OPT_HEADER, array("hd1: val", "hd2: val")); 

//调用远端服务

$result = $client->some_method("parameter");

服务端:一个普通的php-fpm,不是像swoole这种常驻进程。

<?php

class API {

    public function some_method($parameter, $option = "foo") {

    }

    protected function client_can_not_see() {

    }

}

$service = new Yar_Server(new API());

$service->handle();


参考:https://github.com/laruence/yar

技术交流QQ群号:1005491328

感谢三橙挪车支持


Tags:

最近发表
标签列表