Giter Site home page Giter Site logo

laravel-tars's Introduction

Laravel Tars Driver

中文版

描述

Tars driver for laravel.

Laravel集成微服务治理框架Tars

功能

  • 支持服务打包
  • 支持Laravel/Lumen原生开发
  • 支持TarsConfig
  • 支持TarsLog
  • 支持网关注册下线
  • 支持请求开始(laravel.tars.requesting)、请求结束(laravel.tars.requested)事件
  • 支持echo输出内容
  • 支持http和tars协议
  • 支持zipkin分布式追踪(已移除,可以使用laravel-zipkin扩展包)

限制

  • 受限于框架本身的设计,不支持协程

环境依赖

  1. Laravel/Lumen5.x
  2. Tars-PHP

安装

  1. 创建项目

    创建Tars项目目录结构(scripts、src、tars),Laravel/Lumen项目放在src目录下

  2. 安装Laravel Tars包

    更新Composer依赖

    composer require "luoxiaojun1992/laravel-tars:*"

    或添加 requirement 到 composer.json

    {
      "require": {
        "luoxiaojun1992/laravel-tars": "*"
      }
    }

    添加ServiceProvider,编辑src/bootstrap/app.php

    $app->register(\Lxj\Laravel\Tars\ServiceProvider::class);

    初始化Laravel Tars

    php artisan vendor:publish --tag=tars
    
  3. 修改配置文件src/config/tars.php文件proto字段,替换appName、serverName、objName

  4. 如果使用http协议,且需要自动注册到网关(目前仅支持Kong),修改配置文件src/config/tars.php

    'registries' => [
         [
             'type' => 'kong',
             'url' => 'http://kong:8001/upstreams/tars_mysql8/targets', //根据实际情况填写
         ]
    ]
  5. 配置中心(TarsConfig)、日志服务(TarsLog)

    服务启动时会自动拉取配置,如果需要记录日志,可以使用类似Log::info('test log');

    如果需要指定TarsLog记录的最低日志级别,修改配置文件src/config/tars.php

    'log_level' => \Monolog\Logger::INFO
  6. 如果使用http协议,按框架原生方式编写代码

     $router->get('/test', function () {
         \Illuminate\Support\Facades\Log::info('laravel tars test log');
         return 'Laravel Tars Test Success';
     });
  7. 如果使用tars协议

    在tars目录下编写tars接口描述文件,修改配置文件src/config/tars文件proto字段,新增tarsFiles

    在scripts目录执行编译脚本生成接口代码

    /bin/bash tars2php.sh

    在src/app/Tars/impl目录下创建接口实现类,编写业务逻辑代码

    修改src/config/tars.php文件services字段,替换接口和接口实现命名空间

  8. 搭建Tars-PHP开发环境

    如果使用http协议,请参考TARS-PHP-HTTP服务端与客户端开发

    如果使用tars协议,请参考TARS-PHP-TCP服务端与客户端开发

  9. 在Tars-PHP开发环境下打包项目(在src目录下执行php artisan tars:deploy)

  10. 在Tars管理后台发布项目,请参考TARS-PHP-TCP服务端与客户端开发),测试curl 'http://{ip}:{port}/{api_route}'

使用示例

Laravel请参考 https://github.com/luoxiaojun1992/laravel-tars-demo

Lumen请参考 https://github.com/luoxiaojun1992/lumen-tars-demo

集成部署

Jenkins Pipeline 配置示例(根据实际情况修改)

Laravel:

pipeline {
    agent {
        node {
            label 'phpenv'
        }
    }
    parameters {
        string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: '发布版本描述' )
        string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'git分支,如:develop,master  默认: master')
    }
    environment {
        def JENKINS_HOME = "/root/jenkins"
        def PROJECT_ROOT = "$JENKINS_HOME/workspace/laravel-tars-demo"
        def APP_NAME = "PHPTest"
        def SERVER_NAME = "LaravelTars"
    }
    stages {
        stage('代码拉取与编译'){
            steps {
                echo "checkout from git"
                git credentialsId:'2', url: 'https://gitee.com/lb002/laravel-tars-demo', branch: "${env.BRANCH_NAME}"
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "Composer Install"
                        sh "composer clear-cache"
                        sh "composer install -vvv"
                        sh "cp .env.example .env"
                        sh "php artisan config:clear"
                        sh "php artisan config:cache"
                    }
                }
            }
        }
        stage('单元测试') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "phpunit 测试"
                        sh "vendor/bin/phpunit tests/"
                        echo "valgrind 测试"
                    }
                }
            }
        }
        stage('覆盖率测试') {
            steps {
                echo "LCOV 覆盖率测试"
            }
        }
        stage('打包与发布') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "打包"
                        sh "php artisan tars:deploy"
                        echo "发布"
                        sh "ls *.tar.gz > tmp.log"
                        echo "上传build包"
                        def packageDeploy = sh(script: "head -n 1 tmp.log", returnStdout: true).trim()
                        sh "curl -H 'Host:172.18.0.3:3000' -F 'suse=@./${packageDeploy}' -F 'application=${APP_NAME}' -F 'module_name=${SERVER_NAME}' -F 'comment=${env.TAG_DESC}' http://172.18.0.3:3000/pages/server/api/upload_patch_package > curl.log"
                        echo "发布build包"
                        def packageVer = sh(script: "jq '.data.id' curl.log", returnStdout: true).trim()
                        def postJson = '{"serial":true,"items":[{"server_id":"34","command":"patch_tars","parameters":{"patch_id":' + packageVer + ',"bak_flag":false,"update_text":"${env.TAG_DESC}"}}]}'
                        echo postJson
                        sh "curl -H 'Host:172.18.0.3:3000' -H 'Content-Type:application/json' -X POST --data '${postJson}' http://172.18.0.3:3000/pages/server/api/add_task"
                    }
                }
            }
        }
    }
    post {
        success {
            emailext (
                subject: "[jenkins]构建通知:${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 成功  !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "[email protected]",
            )
            cleanWs()
        }
        failure {
            emailext (
                subject: "[jenkins]构建通知:${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 失败 !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "[email protected]",
            )
            cleanWs()
        }
    }
}

Lumen:

pipeline {
    agent {
        node {
            label 'phpenv'
        }
    }
    parameters {
        string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: '发布版本描述' )
        string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'git分支,如:develop,master  默认: master')
    }
    environment {
        def JENKINS_HOME = "/root/jenkins"
        def PROJECT_ROOT = "$JENKINS_HOME/workspace/lumen-tars-demo"
        def APP_NAME = "PHPTest"
        def SERVER_NAME = "LumenTars"
    }
    stages {
        stage('代码拉取与编译'){
            steps {
                echo "checkout from git"
                git credentialsId:'2', url: 'https://gitee.com/lb002/lumen-tars-demo', branch: "${env.BRANCH_NAME}"
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "Composer Install"
                        sh "composer clear-cache"
                        sh "composer install -vvv"
                        sh "cp .env.example .env"
                    }
                }
            }
        }
        stage('单元测试') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "phpunit 测试"
                        sh "vendor/bin/phpunit tests/"
                        echo "valgrind 测试"
                    }
                }
            }
        }
        stage('覆盖率测试') {
            steps {
                echo "LCOV 覆盖率测试"
            }
        }
        stage('打包与发布') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "打包"
                        sh "php artisan tars:deploy"
                        echo "发布"
                        sh "ls *.tar.gz > tmp.log"
                        echo "上传build包"
                        def packageDeploy = sh(script: "head -n 1 tmp.log", returnStdout: true).trim()
                        sh "curl -H 'Host:172.18.0.3:3000' -F 'suse=@./${packageDeploy}' -F 'application=${APP_NAME}' -F 'module_name=${SERVER_NAME}' -F 'comment=${env.TAG_DESC}' http://172.18.0.3:3000/pages/server/api/upload_patch_package > curl.log"
                        echo "发布build包"
                        def packageVer = sh(script: "jq '.data.id' curl.log", returnStdout: true).trim()
                        def postJson = '{"serial":true,"items":[{"server_id":"33","command":"patch_tars","parameters":{"patch_id":' + packageVer + ',"bak_flag":false,"update_text":"${env.TAG_DESC}"}}]}'
                        echo postJson
                        sh "curl -H 'Host:172.18.0.3:3000' -H 'Content-Type:application/json' -X POST --data '${postJson}' http://172.18.0.3:3000/pages/server/api/add_task"
                    }
                }
            }
        }
    }
    post {
        success {
            emailext (
                subject: "[jenkins]构建通知:${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 成功  !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "[email protected]",
            )
            cleanWs()
        }
        failure {
            emailext (
                subject: "[jenkins]构建通知:${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 失败 !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "[email protected]",
            )
            cleanWs()
        }
    }
}

Jenkins部署过程 Jenkins Pipeline

PHP框架集成Tars

TARS如何集成到PHP框架

laravel-tars's People

Contributors

luoxiaojun1992 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

laravel-tars's Issues

var_dump回在调试的时候打印出来

src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php文件64行

if (Util::isLumen()) {
$auth = $application['auth'];
$reflect = new \ReflectionObject($auth);
$prop = $reflect->getProperty('customCreators');
$prop->setAccessible(true);
$cc = $prop->getValue($auth);
64 var_dump(isset($cc['api']));

        $illuminateResponse = $application->dispatch($illuminateRequest);
    }

注释一下var_dump

新版本是否存在内存泄漏问题?

[2020-09-10 09:52:04] local.ERROR: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 1): Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) at /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:726)
[stacktrace]
#0 {main}
"} 

[2020-09-11 11:44:13] local.ERROR: Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes) {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 1): Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes) at /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Routing/Router.php:393)
[stacktrace]
#0 {main}
"} 

希望能够压测一下,看看是不是框架存在泄漏问题?

关于swoole下不能使用app('request')的问题

laravel-tars能不能参考swooletw/laravel-swoole提供沙箱环境,对每个请求都重新绑定一些新的实例。因为目前全局或者单例变量都是共用的.
swooletw/laravel-swoole是通过Context类用协程id来保存每次请求需要重新生成的request,使用完后删除。用Sandbox类来封装

程序时常报错:failed to open stream: Too many open files

项目采用 laravel-tars 开发,laravel日志采用daily方式,每天生成一个日志文件,便于排错。
提供http服务的server在运行一段时间之后会报错failed to open stream: Too many open files,程序无法继续运行。
通过查看进程运行情况发现是日志文件打开数量过多导致的,日志写入后不会关闭么?

想问一下是不是我应用的方式不正确还是其他原因导致的问题,有没有什么建议的实践方式?谢谢。

显示的报错信息:
/tarsnode/data/CM.HttpServer/bin/src/bootstrap/app.php): failed to open stream: Too many open files| #0 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(48): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() #1 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(48): include() #2 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(30): Lxj\Laravel\Tars\App::createApp() #3 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(165): Lxj\Laravel\Tars\App::getApp() #4 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(119): Lxj\Laravel\Tars\Route\TarsRoute->app() #5 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(28): Lxj\Laravel\Tars\Route\TarsRoute->clean() #6 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/phptars/tars-server/src/protocol/HTTPProtocol.php(35): Lxj\Laravel\Tars\Route\TarsRoute->dispatch() #7 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/phptars/tars-server/src/core/Server.php(683): Tars\protocol\HTTPProtocol->route() #8 {main}

这个是进程信息:
image

打开文件最多的进程为:
image

部分日志信息截图:
image

完整的日志信息:
http_16485.log

用了lumen自带的api守卫发到tars平台上,第一次访问的时候正常,第二次就提示如下错误,本地用nginx一切正常

umen.ERROR: InvalidArgumentException: Auth guard driver [api] is not defined. in /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/illuminate/auth/AuthManager.php:97
Stack trace:
#0 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/illuminate/auth/AuthManager.php(68): Illuminate\Auth\AuthManager->resolve('api')
#1 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/app/Http/Middleware/Authenticate.php(41): Illuminate\Auth\AuthManager->guard('api')
#2 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/illuminate/pipeline/Pipeline.php(149): App\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#3 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#4 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#5 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/app/Http/Middleware/ApiMiddleware.php(37): Laravel\Lumen\Routing\Pipeline->Laravel\Lumen\Routing{closure}(Object(Illuminate\Http\Request))
#6 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/illuminate/pipeline/Pipeline.php(149): App\Http\Middleware\ApiMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#7 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#8 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#9 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/illuminate/pipeline/Pipeline.php(102): Laravel\Lumen\Routing\Pipeline->Laravel\Lumen\Routing{closure}(Object(Illuminate\Http\Request))
#10 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(410): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#11 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(256): Laravel\Lumen\Application->sendThroughPipeline(Array, Object(Closure))
#12 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(160): Laravel\Lumen\Application->handleFoundRoute(Array)
#13 [internal function]: Laravel\Lumen\Application->Laravel\Lumen\Concerns{closure}(Object(Illuminate\Http\Request))
#14 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#15 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/fruitcake/laravel-cors/src/HandleCors.php(37): Laravel\Lumen\Routing\Pipeline->Laravel\Lumen\Routing{closure}(Object(Illuminate\Http\Request))
#16 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/illuminate/pipeline/Pipeline.php(149): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#18 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#19 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/illuminate/pipeline/Pipeline.php(102): Laravel\Lumen\Routing\Pipeline->Laravel\Lumen\Routing{closure}(Object(Illuminate\Http\Request))
#20 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(410): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#21 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(166): Laravel\Lumen\Application->sendThroughPipeline(Array, Object(Closure))
#22 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(52): Laravel\Lumen\Application->dispatch(Object(Illuminate\Http\Request))
#23 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(27): Lxj\Laravel\Tars\Route\TarsRoute->handle(Object(Tars\core\Request))
#24 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/phptars/tars-server/src/protocol/HTTPProtocol.php(35): Lxj\Laravel\Tars\Route\TarsRoute->dispatch(Object(Tars\core\Request), Object(Tars\core\Response))
#25 /data/tars/tarsnode-data/Kdy.RpcClient/bin/src/vendor/phptars/tars-server/src/core/Server.php(675): Tars\protocol\HTTPProtocol->route(Object(Tars\core\Request), Object(Tars\core\Response))
#26 {main}

做重定向跳转的时候ios系统下很慢,导致请求超时

代码:

//如果没有openId,携带业务参数获取微信授权
        if(!isset($param['openid'])){
            //携带业务参数获取微信授权
            $auth_url = 'http://mp.fchomg.com/mp/auth/init';
           // $auth_url = 'http://web.user.com:8080/mp/auth/init';
            $back_url = $request->fullUrl();
            log::info($auth_url.'?back_url='.$back_url.'&app_id='.$appId);
            return redirect($auth_url.'?back_url='.$back_url.'&app_id='.$appId);
        }

1.这段在ios系统下任何浏览器转发都很慢(包括Mac safari下,Mac谷歌 火狐浏览器正常);
2.在安卓系统下正常转发
3.用传统nginx代理无论哪个操作系统都正常转发

你好,请问有遇到过数据库句柄一直不释放问题吗?

最近发现数据库请求会出现句柄一直不释放,导致会造成 mysql Too many connections。这个是不是框架没有请求结束将句柄回收的问题? php-fpm 模型每次请求都会释放进程,所以 mysql 连接也会同时释放,然后现在常驻之后就会出现一直不释放的问题。

请教一下关于request接收的方式

以下三种只有第二种可以接收到数据
/**
* @decr 微信支付回调
* @param content 微信回调xml数据
* @@return mixed
*/
public function notify(Request $request)
{
$xml = file_get_contents( 'php://input' );
log::debug('error:'.$xml);
$xmls = $request->getContent();
log::debug('error:'.$xmls);
$content = $content ?? Request::createFromGlobals()->getContent();
log::debug('error:'.$content);
$data = Support::fromXml($xml);
//$attach = json_encode($data['attach'],true);

    $res = WechartPayService::instance(10000)->notify();
    return $res;
}

看了laravel-tars的Request部分是将TarsRequest 转为 Illuminate\Http\Request,目前我自己如何能让Symfony\Component\HttpFoundation\Request也可以接收到数据,因为支付采用了yansongda\pay三方包,导致用Symfony\Component\HttpFoundation\Request不能接收到xml数据

用lumen 版本为5.5composer后,http请求报以下错误

Target [Illuminate\Contracts\Http\Kernel] is not instantiable.|#0 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/illuminate/container/Container.php(758): Illuminate\Container\Container->notInstantiable('Illuminate\Cont...')
#1 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/illuminate/container/Container.php(631): Illuminate\Container\Container->build('Illuminate\Cont...')
#2 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/illuminate/container/Container.php(586): Illuminate\Container\Container->resolve('Illuminate\Cont...', Array)
#3 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/laravel/lumen-framework/src/Application.php(230): Illuminate\Container\Container->make('Illuminate\Cont...', Array)
#4 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(37): Laravel\Lumen\Application->make('Illuminate\Cont...')
#5 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(165): Lxj\Laravel\Tars\App::getApp(Object(Illuminate\Http\Request))
#6 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(119): Lxj\Laravel\Tars\Route\TarsRoute->app(Object(Illuminate\Http\Request))
#7 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(28): Lxj\Laravel\Tars\Route\TarsRoute->clean(Object(Illuminate\Http\Request))
#8 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/phptars/tars-server/src/protocol/HTTPProtocol.php(35): Lxj\Laravel\Tars\Route\TarsRoute->dispatch(Object(Tars\core\Request), Object(Tars\core\Response))
#9 /data/tars/tarsnode-data/PHPTest.PHPServer/bin/src/vendor/phptars/tars-server/src/core/Server.php(683): Tars\protocol\HTTPProtocol->route(Object(Tars\core\Request), Object(Tars\core\Response))
#10 {main}

Bug 无法实例化Config

Class config does not exist|
#0 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Container/Container.php(752): ReflectionClass->__construct('config') 
#1 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('config') 
#2 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Container/Container.php(586): Illuminate\Container\Container->resolve('config', Array) 
#3 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(732): Illuminate\Container\Container->make('config', Array) 
#4 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(110): Illuminate\Foundation\Application->make('config', Array) 
#5 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(269): app('config') 
#6 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(28): config(Array) 
#7 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(166): Lxj\Laravel\Tars\App::getApp() 
#8 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(120): Lxj\Laravel\Tars\Route\TarsRoute->app() 
#9 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(26): Lxj\Laravel\Tars\Route\TarsRoute->clean() 
#10 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/phptars/tars-server/src/protocol/HTTPProtocol.php(35): Lxj\Laravel\Tars\Route\TarsRoute->dispatch(Object(Tars\core\Request), Object(Tars\core\Response)) 
#11 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/phptars/tars-server/src/core/Server.php(683): Tars\protocol\HTTPProtocol->route(Object(Tars\core\Request), Object(Tars\core\Response)) 
#12 {main}

image
这个 config 报错了

刷新第二次页面就出现这个问题了,上面的错误就没有了

Class cookie does not exist|#0 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Container/Container.php(752): ReflectionClass->__construct('cookie') 
#1 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('cookie') 
#2 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Container/Container.php(586): Illuminate\Container\Container->resolve('cookie', Array) 
#3 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(732): Illuminate\Container\Container->make('cookie', Array) 
#4 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(145): Illuminate\Foundation\Application->make('cookie') 
#5 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(26): Lxj\Laravel\Tars\Route\TarsRoute->clean() 
#6 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/phptars/tars-server/src/protocol/HTTPProtocol.php(35): Lxj\Laravel\Tars\Route\TarsRoute->dispatch(Object(Tars\core\Request), Object(Tars\core\Response)) 
#7 /data/tars/tarsnode-data/Activity.groupBuy/bin/src/vendor/phptars/tars-server/src/core/Server.php(683): Tars\protocol\HTTPProtocol->route(Object(Tars\core\Request), Object(Tars\core\Response))
 #8 {main}

框架搭建是使用 laravel-tars-demo 这个的,然后 composer install 后就变成这样子了

image
注释掉这段代码就能够进去了
image
但是还是存在着服务启动第一次请求,会返回 config 无法实例化错误问题

$reflector = new ReflectionClass($concrete);

这里的 $concrete='config' 然后无法实例化,因为这个 config 不是命名空间,导致无法实例化。
image
这样子就不报错了,应该是别名使用上出问题了

请问能够增加对laravel框架(非lumen)的支持吗?

请问能够增加对laravel框架(非lumen)的支持吗?

目前laravel tars driver支持的是lumen框架,实际使用时缺少部分laravel的功能,带来不便。

虽然说微服务框架主要用于提供api接口,使用lumen开发更为轻量。但laravel众多的插件对lumen的支持有限,导致不能按照以前的习惯快速开发。而且tars使用swoole服务端常驻内存的形式,使得laravel启动时加载服务众多的劣势不再明显。

因此,希望能在下一版增加对laravel框架(非lumen)的支持,谢谢!
QQ图片20190612174238

laravel 5.7 compose didnot support

  • luoxiaojun1992/laravel-tars 0.1.6 requires phptars/tars-server 0.5.0 -> satisfiable by phptars/tars-server[0.5.0].
    • Conclusion: don't install laravel/framework v5.7.29
    • Conclusion: don't install laravel/framework v5.7.28
    • Conclusion: don't install laravel/framework v5.7.27
    • Conclusion: don't install laravel/framework v5.7.26
    • Conclusion: don't install laravel/framework v5.7.25
    • Conclusion: don't install laravel/framework v5.7.24
    • Conclusion: don't install laravel/framework v5.7.23
    • Conclusion: don't install laravel/framework v5.7.22
    • Conclusion: don't install laravel/framework v5.7.21
    • Conclusion: don't install laravel/framework v5.7.20
    • Conclusion: don't install laravel/framework v5.7.19
    • Conclusion: don't install laravel/framework v5.7.18
    • Conclusion: don't install laravel/framework v5.7.17
    • Conclusion: don't install laravel/framework v5.7.16
    • Conclusion: don't install laravel/framework v5.7.15
    • Conclusion: don't install laravel/framework v5.7.14
    • Conclusion: don't install laravel/framework v5.7.13
    • Conclusion: don't install laravel/framework v5.7.12
    • Conclusion: don't install laravel/framework v5.7.11
    • Conclusion: don't install laravel/framework v5.7.10
    • Conclusion: don't install laravel/framework v5.7.9
    • Conclusion: don't install laravel/framework v5.7.8
    • Conclusion: don't install laravel/framework v5.7.7
    • Conclusion: don't install laravel/framework v5.7.6
    • Conclusion: don't install laravel/framework v5.7.5
    • Conclusion: don't install laravel/framework v5.7.4
    • Conclusion: don't install laravel/framework v5.7.3
    • Conclusion: don't install laravel/framework v5.7.2
    • Installation request for luoxiaojun1992/laravel-tars 0.1.6 -> satisfiable by luoxiaojun1992/laravel-tars[0.1.6].
    • Conclusion: don't install laravel/framework v5.7.1
    • Conclusion: don't install laravel/framework v5.7.0
    • phptars/tars-server 0.5.0 requires illuminate/events ~5.5.0 -> satisfiable by illuminate/events[5.5.x-dev, v5.5.0, v5.5.16, v5.5.17, v5.5.2, v5.5.28, v5.5.33, v5.5.34, v5.5.35, v5.5.36, v5.5.37, v5.5.39, v5.5.40, v5.5.41, v5.5.43, v5.5.44].
    • don't install illuminate/events 5.5.x-dev|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.0|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.16|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.17|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.2|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.28|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.33|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.34|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.35|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.36|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.37|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.39|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.40|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.41|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.43|don't install laravel/framework 5.7.x-dev
    • don't install illuminate/events v5.5.44|don't install laravel/framework 5.7.x-dev
    • Installation request for laravel/framework 5.7.* -> satisfiable by laravel/framework[5.7.x-dev, v5.7.0, v5.7.1, v5.7.10, v5.7.11, v5.7.12, v5.7.13, v5.7.14, v5.7.15, v5.7.16, v5.7.17, v5.7.18, v5.7.19, v5.7.2, v5.7.20, v5.7.21, v5.7.22, v5.7.23, v5.7.24, v5.7.25, v
      5.7.26, v5.7.27, v5.7.28, v5.7.29, v5.7.3, v5.7.4, v5.7.5, v5.7.6, v5.7.7, v5.7.8, v5.7.9].

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.