可以把 laravel 和 webman 整合到一起吗

chen

问题描述

比如把 webman 做成 laravel 的一个 package,假设这个包叫 workerman/laravel-webman
这个包其实就和 https://github.com/walkor/webman 代码差不多

composer require workerman/laravel-webman 后,会在laravel里注册一个command,比如就叫 webman(可以使用 php artisan webman 执行)

  1. 在laravel的app/Http/Controllers里定义控制器
  2. 在laravel的routes目录生成一个webman.php,用于定义 webman 的路由
  3. laravel和webman都使用laravel项目里 app/Models 里定义的模型
  4. 执行php artisan webman start,就相当于在webman里执行 php webman start,可以载入routes/webman.php 定义的路由

这样 laravel 专用的包就可以直接用了(比如 dcat/laravel-admin),用于做管理后台,用nginx + fpm部署
webman 用于写 api 接口,用 nginx 代理 webman 这种方式部署

既发挥了 laravel 的特长(快速开发,生态完善,性能不好无所谓做后台用)
也发挥了 webman 的特长(简单高效,性能强悍)

为此你搜索到了哪些方案及不适用的原因

开始想的是这样规划目录

  • project
    • laravel
    • webman

但是这样的缺点就是:

  1. 定义模型的时候,即使 webman 使用 Laravel的ORM,也得在 laravel和webman里各定义一次
  2. 如果都使用到了同一个扩展包,还得在两个目录里都composer require一次
551 3 0
3个回答

xini2603

1、这个你还不如直接用基于workerman用于lavael 的加速器,性能也能提高10倍左右,
2、就是你想的二个项目平行,高性能走webman webman可以和laravel 共享的,直接把你的webman项目放入你的laravel下面,webman中的composer.json中定义laravel中的共享目录,建议模块化开发,如在psr-4中定义laravel的模块目录:
"Modules\": "../modules/"
要注意:1、依赖包二边都要有。
2、引用的缓存,orm文件先自己定义一下:如orm公共文件二边都定义一个:app\modle;缓存:app\cache,这样在使用时就用公共的2边都能识别,类式以下方法把二边引用调为一至即可。放到各自的app公共目录中,已实现开发的业务代码二边通用,也就是开发是不要使用默认的:Illuminate\Database\Eloquent\Model,类式二边引用不一样的都通过这种自定义转一下后在用就行了,已达到二边共享,只须要二边使用的底层包一样,对开发没有啥影响,老项目可以采用批量替换一键就转过来了,就算平时开发也不建议直接引用laravel的原生引用,因为后期如果你要调整,不可能一个文件一个文件调整,比如以下试例中的日期,laravel升级后不是你想要的日期格式了,由于你自定义了model 直接修改app\model是加入日期转换就全局转了,不至于使用原生的每一个文件去改。使用上把以前的:use Illuminate\Database\Eloquent\Model 改为:use App\Models\Model ,其它缓存与不通用的使用方法同理方法调整即可,按这个规则开发,就可以实现一套代码二个平台运行,对性能没有要求时直接laravel运行,对性能要求高的如小程序app啥的,就可以启用webman运行,

##laravel

namespace App\Models;

use Illuminate\Database\Eloquent\Model as BaseModel;

/**
 * App\Models\Model
 *
 *
 * @mixin \Eloquent
 */
class Model extends BaseModel
{
    public function serializeDate(\DateTimeInterface $dateTime)
    {
        return $dateTime->format('Y-m-d H:i:s');
    }
}
##webmab

namespace App\Models;

use support\Model as BaseModel;

/**
 * App\Models\Model
 *
 *
 * @mixin \Eloquent
 */
class Model extends BaseModel
{
    public function serializeDate(\DateTimeInterface $dateTime)
    {
        return $dateTime->format('Y-m-d H:i:s');
    }
}

也可以自己在webman中实现laravel的底层类:已实现代码共享如laravel的DB类在webman实现方法:

新建文件:support/DB.php
<?php

    /**
     * Class 数据库DB别名
     * @package support
     */
    class DB extends \support\Db
    {

    }

在composer.json中的files下面增加: "./support/DB.php",

这样即实现了laravel的DB类,缓存及laravel的其它门面同理实现
  • liong 22天前

    大哥,"基于workerman用于lavael 的加速器"这个有文档吗

  • chen 22天前

    是有点麻烦,其实就是贪图 laravel 里面一堆现成的admin包

  • liong 22天前

    能加速laravel也是可以的

  • xini2603 20天前

    有的,可以直接workerman加速,论坛里面有,须要小改一下上传的验证

  • liong 20天前

    哪个链接啊

  • xini2603 20天前

    https://www.workerman.net/q/9831
    小调整一下就可以正式用了,目前没发现其它问题

zjkal✅

感觉没必要, 使用laravel的orm等composer包就够了

  • 暂无评论
🔝