运行模式
Stone提供两种运行模式: Stone-Server和Stone-Web。
Stone-Server
Server模式的请求处理的Kernel是:App\Console\Kernel, 执行流程与执行别的artisan命令一致。因此,process方法相当于在编写一个artisan命令的fire方法。你可以使用原来在artisan命令里可以使用的所有组件和功能。
Stone-Server执行堆栈:
Stack trace:
#0 vendor/qufenqi/stone/src/Qufenqi/Stone/Console/Commands/StoneServer.php(64): Qufenqi\Stone\FastCGI\Server->start()
#1 [internal function]: Qufenqi\Stone\Console\Commands\StoneServer->handle()
#2 vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#3 vendor/laravel/framework/src/Illuminate/Console/Command.php(169): Illuminate\Container\Container->call(Array)
#4 vendor/symfony/console/Command/Command.php(256): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 vendor/laravel/framework/src/Illuminate/Console/Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#6 vendor/symfony/console/Application.php(791): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 vendor/symfony/console/Application.php(186): Symfony\Component\Console\Application->doRunCommand(Object(Qufenqi\Stone\Console\Commands\StoneServer), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 vendor/symfony/console/Application.php(117): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 artisan(36): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 {main}
Stone-Web
Stone-Web相对复杂, 处理请求的Kernel是App\Http\Kernel, 这个Kernel继承自Qufenqi\Stone\Foundation\Http, 接管了原来的Laravel的Kernel。
这样的主要目的是:
细化ServiceProvider为Boot类型和Request类型
细节请查看:服务提供者
给予App和Facade快照恢复的能力
细节请查看:理解资源复用
改变系统某些ServiceProvider的默认行为
比如SessionServiceProvider运行在php cli模式下时会把driver设置成array, 这样Session没法保存, 需要做出相应处理。
目前还没有找到完美实现Stone-Web的方案, 因此关于Stone-Web的实现, 可能会随时调整, 请知悉。 对于Stone-Web的实现过程感兴趣可以查看:分析,理解,优化LARAVEL