[Swoole] 结合 Laravel 与 Swoole,更简易的开发与布署!

it阿布 · · 3309 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

构想

Swoole 实现了 HTTP Server,也就是说 PHP 的布署不再需要依赖 Nginx 或 Apache 这样的网页伺服器,也不需要靠着 PHP-FPM 或 PHP_mod 才能与 Web Server 沟通。

安装了 Swoole extension 后的 PHP,就像 golang 那般內建高效率的 HTTP Server。

甚至,只要用一个简单的 Dockerfile 就可以实现布署的流程,再也不需要 link nginx 又 link php-fpm,把 Dockerfile 弄得跟蜘蛛网一样复杂。

只要一个 Dockerfile,就能够完成 Web Server 跟应用程式布署,多开心吶。

FROM php:cli
COPY project /var/www/project

CMD ["php", "/var/www/project/index.php"]

结合 Laravel?

说到底,如果用了 Swoole 还得重复造轮子,那这玩意还是沒啥用。

可是如果它能够结合当今最火红的 PHP Web Framework:Laravel,我想一切都不太一样了。

实作

Step 1. 取得 Laravel

先从 github 上 clone 最新版本的 laravel 下来。

Step 2. 修改 index.php

Laravel 的程式进入点位于 public/index.php 我们也只会变更到这个档案

原本的档案(移除注解):

<?php
require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

修改过后:

<?php
require dirname(__DIR__).'/bootstrap/autoload.php';

// IP 跟 Port 可以自行调整
// 如果要监听全部介面可以用 0.0.0.0
// port 小於 1024 需要 root 权限
$http = new Swoole\Http\Server('127.0.0.1', 9000);

$http->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    /**
     * @var \Illuminate\Foundation\Application $app
     * @var \Illuminate\Contracts\Http\Kernel $kernel
     * @var \Illuminate\Http\Request $laravelRequest
     * @var \Illuminate\Http\Response $laravelResponse
     */
    $app = require dirname(__DIR__).'/bootstrap/app.php';
    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

    $laravelResponse = $kernel->handle(
        $laravelRequest = new \Illuminate\Http\Request(
            $request->get ?? [],
            $request->post ?? [],
            [],
            $request->cookie ?? [],
            $request->files ?? [],
            $request->server ?? []
        )
    );

    $kernel->terminate($laravelRequest, $laravelResponse);

    $response->status($laravelResponse->getStatusCode());
    $response->write($laravelResponse->getContent());

    unset(
        $app,
        $kernel,
        $laravelResponse,
        $laravelRequest
    );
});

$http->start();

执行

php public/index.php 即可启动

启动前別忘了要设定好 .env


更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的PHP技术交流群953224940

进阶PHP月薪30k>>>架构师成长路线【视频、面试文档免费获取】


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:it阿布

查看原文:[Swoole] 结合 Laravel 与 Swoole,更简易的开发与布署!

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3309 次点击  
加入收藏 微博
上一篇:go mod环境搭建
1 回复  |  直到 2021-08-17 17:20:36
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传