PHPackages                             stone/kernel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. stone/kernel

ActiveLibrary

stone/kernel
============

High performance FastCGI server base on swoole.

20825829[2 issues](https://github.com/StoneGroup/stone/issues)PHP

Since Jan 11Pushed 8y ago9 watchersCompare

[ Source](https://github.com/StoneGroup/stone)[ Packagist](https://packagist.org/packages/stone/kernel)[ RSS](/packages/stone-kernel/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

关于Stone
=======

[](#关于stone)

Stone是一个优化Laravel框架性能的方案， 能大幅提升基于Laravel的程序性能，使Laravel能轻松应对高并发的使用场景。

优化原理
----

[](#优化原理)

如果你正在考虑框架性能优化的问题， 你应该对PHP应该已经有足够的了解。 如你所知， PHP每次请求结束， 都会释放掉执行中建立的所有资源。这样有一个很大的好处：PHP程序员基本不用费力去考虑资源释放的问题，诸如内存，IO句柄，数据库连接等，请求结束时PHP将全部释放。PHP程序员几乎不用关心内存释放的问题，也很难写出内存泄露的程序。这让PHP变得更加简单容易上手， 直抒心意。但是同时也带来了一个坏处：PHP很难在请求间复用资源， 类似PHP框架这种耗时的工作， 每次请求都需要反复做——即使每次都在做同样的事情。也正因为如此，在PHP发展过程中，关于是否使用框架的争论也从未停止过。

Stone主要优化的就是这个问题。 在框架资源初始化结束后再开启一个FastCGI服务，这样， 新的请求过来是直接从资源初始化结束后的状态开始，避免每次请求去做资源初始化的事情。所以， 本质上， Stone运行时是常驻内存的，它和PHP-FPM一样，是一个FastCGI的实现，不同的是， FPM每次执行请求都需要重新初始化框架， Stone直接使用初始化的结果。

同样，事情总是有好有坏。使用Stone后的坏处是：PHP编程变得更难了。你需要考虑内存的释放，需要关心PHP如何使用内存。甚至， 你需要了解使用的框架，以免『不小心』写出让人『惊喜』的效果。同时， PHP的调试变得更难， 因为每次修改程序后需要重启进程才能看到效果。事实上，开发Stone时针对调试这方面做了不少工作。好处是：程序的性能得到极大的提高。

当然， 客观上的一些利好因素是：

- PHP的内存回收已经相当稳定和高效
- Swoole稳定性已经在相当多的项目中得到验证
- Laravel代码质量相当高

正是因为有了这些条件， 才使得Stone的出现成为可能， 感谢这个伟大的开源时代！

性能对比
----

[](#性能对比)

应用类型原始LaravelStone-WebStone-Server原生php直接echolaravel5 默认页面1503000----laravel5 简单接口150300085009500laravel4 实际项目简单页面701000----laravel4 简单接口120--82009500laravel4 实际项目首页35380----- 以上单位全部为RPS
- Stone相对于原始的Laravel有相当可观的提升
- 即使和一个简单的echo相比， Stone性能损失仅10%左右

快速指南
----

[](#快速指南)

### 以Laravel5.3为例

[](#以laravel53为例)

1. 按照Laravel官方文档安装laravel，如果已经安装可以跳过
2. composer安装stone kernel

    ```
    composer require stone/kernel:dev-master

    ```
3. 编辑config/app.php，添加Provider

    ```
     'providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        // 省略很多行

        /*
         * Package Service Providers...
         */
        Stone\StoneServiceProvider::class,

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
    ],
    ```
4. 编辑app/Console/Kernel.php，添加新命令

    ```
    protected $commands = [
        \Stone\Console\Commands\StoneServer::class,
    ];
    ```
5. Stone的安装已经完成，正常情况下stone:server的命令应该可以正常执行了

    ```
    php ./artisan stone:server --help

    Usage:
        stone:server [options]

    Options:
          --debug
          --start
          --reload
          --stop
      -h, --help            Display this help message
      -q, --quiet           Do not output any message
      -V, --version         Display this application version
          --ansi            Force ANSI output
          --no-ansi         Disable ANSI output
      -n, --no-interaction  Do not ask any interactive question
          --env[=ENV]       The environment the command should run under
      -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

    Help:
      A FastCGI server bases on swoole and laravel

    ```
6. 下面我们继续，让Server跑起来， 首先需要设定一些server的参数，我们需要新建一个config/stone.php

    ```
