apache2.4在本地打开laravel项目_laravel+thrift+swoole打造微服务框架

本文介绍了如何利用laravel、thrift和swoole将laravel项目改造为微服务框架。通过创建thrift IDL文件定义服务接口,使用laravel-s扩展提升性能,借助swoole实现异步TCP服务,构建RPC框架。详细步骤包括服务端和客户端代码的编写,以及laravel-s的事件回调设置。
摘要由CSDN通过智能技术生成

9f5ec9013c573d45fc669ef994cddb37.png

laravel作为最受欢迎的php web框架一直广受广大互联网公司的喜爱。

笔者也参与过一些由laravel开发的项目。虽然laravel的性能广受诟病但是业界也有一些比较好的解决方案,比如堆机器,比如使用swoole进行加速。

一个项目立项到开发上线,随着时间和需求的不断激增,会越来越复杂,变成一个大项目,如果前期项目架构没设计的不好,代码会越来越臃肿,难以维护,后期的每次产品迭代上线都会牵一发而动全身。项目微服务化,松耦合模块间的关系,是一个很好的选择,随然增加了维护成本,但是还是很值得的。

那么有什么办法使一个laravel项目改造成微服务呢?

最近研究thrift的时候发现thrift对php之城非常好,那么可不可以使用使用thrift作为rpc框架,使用swoole来实现异步TCP服务,打造一个微服务框架呢。

心动不如行动我们开始尝试一下吧。首先我们创建一个laravel的项目,笔者使用的laravel官方提供的homestead的环境。

laravel new laravel-thrift-app 

安装laravel-s https://github.com/hhxsv5/laravel-s/blob/master/README-CN.md

composer require "hhxsv5/laravel-s:~3.5.0" -vvv 

laravel-s是一个由swoole写的laravel扩展,赋予laravel更好的性能,具体使用方法参看官方文档。

在项目的根目录下新建一个thrift的目录,然后在该子目录下创建 Thrift IDL 文件 user.thrift,用于定义和用户相关的服务接口。

namespace php App.Thrift.User  
// 定义用户接口 
service User {
         
string getInfo(1:i32 id)
 } 

这里我们定义了一个接口,接着在项目根目录下运行如下命令,根据上述 IDL 文件生成相关的服务代码:

thrift -r --gen php:server -out ./ thrift/user.thrift 

查看文件这时候我们会发现在AppThriftUser`目录下生成对应的服务代码。

通过 Composer 安装 Thrift PHP 依赖包:

composer require apache/thrift 

编写服务代码,在 app目录下新建一个 Services/Server 子目录,然后在该目录下创建服务接口类 UserService,该类实现自 `AppThriftUserUserIf` 接口:

<?php
namespace AppServicesServer;


use AppThriftUserUserIf;

class UserService implements UserIf
{
    
    public function getInfo($id)
    {
    
        return "chenSi".$id;
    }
}

在 app 目录下新建一个 Sockets目录用于存放 Swoole 相关代码,首先我们创建一个 ServerTransport.php用来存放服务端代理类,并编写代码如下:

<?php
namespace AppSockets;


use ThriftServerTServerTransport;

class ServerTransport extends TServerTransport
{
    
    /**
     * @var array 服务器选项
     */
    public $options = [
        'dispatch_mode'         => 1, //1: 轮循, 3: 争抢
        'open_length_check'     => true, //打开包长检测
        'package_max_length'    => 8192000, //最大的请求包长度,8M
        'package_length_type'   => 'N', //长度的类型,参见PHP的pack函数
        'package_length_offset' => 0,   //第N个字节是包长度的值
        'package_body_offset'   => 4,   //从第几个字节计算长度
    ];

    /**
     * @var SwooleServer
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值