安装指南
版本选择
Stone推荐使用Laravel5, 但是也保持了对Laravel4的兼容性。 如果你是新项目, 强烈建议使用Laravel5来开发。
运行模式选择
Stone提供两种运行模式:Stone-Server和Stone-Web。
1. Stone-Server
Stone-Server主要针对高性能要求的api调用场景。这种模式下,Session不会工作, 也不会执行Laravel MVC的流程,自然也不会执行Http中间件,所有请求直接交由RequestHandler处理。
一个最简单的Handler定义如下:
<?php namespace App\Servers;
use Qufenqi\Stone\Contracts\RequestHandler;
use Response;
class Handler implements RequestHandler
{
public function process()
{
return Response::make('hello, stone server!');
}
public function onWorkerStart()
{
}
}
如上, 所有请求将直接给Handler的process方法处理,因此能得到最大化的性能。 在测试中, 相比原生php的echo输出, Stone-Server在加载全部框架资源后, 性能损失不到10%。但是,你几乎可以直接使用原来Laravel写好的所有业务代码,使用Laravel的所有组件,也可以直接composer安装需要的组件。
关于Stone-Server的更详细介绍, 请阅读运行模式章节
2. Stone-Web
Stone-Web的目的是优化现有的基于Laravel的网站项目。 Stone接管Laravel的Http Kernel, 负责协调MVC执行流程。 在设计中, 尽量遵循原来的流程。原来的过滤器, 中间件都能正常工作。
为了设计Stone-Web, 我阅读了大部分的Laravel代码, 对Laravel 执行流程和设计架构有一定认识后才开始工作,以求尽可能的兼容原来的Laravel程序。但是,由于实际的项目代码可能很复杂, 原来的程序没有考虑常驻内存的场景,加上我对Laravel的理解难免存在错误,因此在使用Stone-Web的时候一直小心翼翼。
在设计Stone的时候一直遵循着几个原则:
- 不破坏现有代码, 保证现有代码100%能运行在php-fpm上
- 尽量提供保护机制, 降低产生意外错误的概率
这些都是为了尽量降低可能潜在的风险。
尽管如此,如果你对PHP内存使用没有足够的认识, 或者对你现在的项目质量没有足够的把握, 现阶段不推荐你把Stone-Web用于实际的生产环境。
关于Stone-Web的更详细介绍, 请阅读运行模式章节
了解风险
如果你对Stone已经有了初步了解, 并愿意尝试, 请继续阅读风险提示。