1.安装thrift thrift官网安装指南
我是mac,直接brew install thrift,当然centos也装了一遍,按照教程很简单就能装上,没遇到什么问题。
2.laravel新建一个项目test
我预期将thrift生成的代码放在app/Rpc下面,所以编写thrift文件的时候的namespace,写的是App.Rpc.Echo,代码如下:
namespace php App.Rpc.ReEcho
service ReEcho {
string reEcho(1: string str),
}
最简单的一个回文字符串功能。随意放置在某个文件夹里面,命名为echo.thrift。
命令行进入echo.thrift文件夹目录下,然后编译,命令如下:
thrift -r --gen php:server echo.thrift
这个生成服务端的代码,其实也包含了客户端的代码,如果只想要客服端的代码,执行下面的命令:
thrift -r --gen php echo.thrift
代码在当前路径下,生成gen-php目录。可以用--out指定目录。
3.将gen-php下生成的代码拷贝到app下,对应目录机构是app/Rpc/Echo,app新建Services目录,新建ReEchoServices.php,内容如下:
namespace App\Services;
use App\Rpc\ReEcho\ReEchoIf;
class ReEchoServices implements ReEchoIf
{
public function reEcho($str){
return $str;
}
}
其意义是根据thrift生成的代码,对其进行功能实现。
然后新建一个Controller,我直接实现了两个方法,一个作为客户端test,一个作为服务端index,然后定义路由,我直接新建了一个路由文件rpc.php,在app/Providers/RouteserviceProvider.php中添加一个mapRpcRoutes,代码如下:
protected function mapRpcRoutes()
{
Route::prefix('rpc')
->namespace($this->namespace)
->group(base_path('routes/rpc.php'));
}
在map方法里调用一下。
rpc.php里面是两条路由:
Route::post('/index', 'Rpc\IndexController@index')->name('rpc.index');
Route::get('/test', 'Rpc\IndexController@test')->name('rpc.test');
服务端一定要写成post请求方法,不然会报错。
项目结构如图: