hermes-php/hermes-micro

此包已被弃用且不再维护。作者建议使用 espresso/skeleton 包。

适用于知道自己在做什么的开发者的框架

安装: 31

依赖者: 0

建议者: 0

安全: 0

类型:项目

2.0.0 2019-03-16 02:58 UTC

This package is auto-updated.

Last update: 2019-08-18 18:27:56 UTC


README

力量已经到来

介绍

感谢您信任Hermes。我们相信这个最小化、下一代PHP框架将成为您的宝贵工具。

在开始之前,您必须知道我们为您做出了一些重要的决定,如果您觉得它们不适合您,您可以完全更改。例如

  • 我们为您选择了PSR-7 (Http Messages)实现,称为Zend Diactoros。它还附带了一个PSR-17 (Http Message Factories)实现。
  • 我们为您选择了PSR-11 (DI Container)实现,League Container。您可以随时将其替换为您最喜欢的容器。
  • 我们为您选择了Zend Router实现,Nikita的著名Fast Route。如果它不适合您的需求,您也可以更改它。
  • 我们添加了Road Runner,这是一个高性能的PHP应用程序服务器、负载均衡器和进程管理器。阅读快速入门指南以了解更多信息。
  • 我们添加了http-interop/response-sender,这是一个简单的函数,用于向客户端发送PSR-7响应。
  • 我们使用容器通过简单的PHP配置文件连接了一切。您可以自由地创建自己的配置方法。所有这些都在config/文件夹中。
  • 我们添加了一个名为views的文件夹,其中包含Hermes主页的视图,主要是为了使其看起来更好看。您应该删除views文件夹和默认的主页处理器(在App\Http\Middleware中)。
  • 我们创建了一个public/目录,其中包含一个入口脚本index.php,以防您想回到旧式的PHP方式并将其放在Apache或Nginx后面。

请记住所有这些,并在开发过程中尽早进行所需的更改。

快速入门指南

这份简短的指南将帮助您处理基本内容。它非常浅显,并假设您有大量的知识。如果您在遵循它时遇到麻烦,请阅读正确的Hermes文档。

通过HTTP提供服务

Hermes Micro支持三种方式在HTTP上提供服务。

传统的索引前端控制器

其中一种是传统的公共文件夹,包含index.php前端控制器。您可以用任何Web服务器(Apache、Nginx + PHP-FPM)指向该脚本并执行它。这个入口点对于使用PHP内置的开发Web服务器进行开发非常有用。只需运行php -S 0.0.0.0:8000 -t public,一切就会运行。

React PHP Web Server

另一种方式,稍微现代一些,是使用React的PHP HTTP Web服务器在TCP套接字上创建一个HTTP服务器(是的,这一切都在PHP中完成)并将您的应用作为长时间运行进程执行。您可以通过运行php bin/server.php来完成此操作。这非常高效,因为文件只由Zend引擎解析一次,由Composer的Autoload自动加载一次,以及由您的DI容器配置一次。然而,您必须编写会意识到请求之间可能存在内存泄漏的代码。如果您想看到代码更改,您必须重新启动服务器。

如果您打算从您的应用程序中制作无状态的Docker容器,这将是理想的设置,这也是Dockerfile默认运行的命令。

重要提示:当使用React PHP web服务器时,如果您不使用中间件,您的静态文件(资源)可能无法正确加载。请检查hermes-php/asset-middleware以获取一个。如果您不需要您的应用提供静态文件,您可以忽略此内容。

Road Runner负载均衡器

当您想在单台机器上运行您的应用,但在其后面放置进程管理和负载均衡器以充分利用您的核心时,您可以使用Road Runner。这是一个能够生成您的应用程序的多个进程并处理它们之间负载的Go应用。我们包括了一个默认的配置文件和一个工作进程,但您必须自行下载适用于您平台的二进制文件。这是在单台机器上提供服务最有效的方式(比PHP-FPM+Nginx+OpCache快得多)。

基准测试

我们使用ab在三种方式下对Hermes Micro的首页进行了基准测试。

测试:5000次请求(50并发)

服务器总时间完成失败每秒请求数每个请求时间
Road Runner2.377秒500002103.4623.770毫秒
ReactPHP7.794秒50000641.4977.943毫秒
PHP开发服务器16.861秒50000296.54168.609毫秒

事实

  • React PHP比常规PHP开发服务器快至少两倍。
  • Road Runner比React PHP快至少三倍。
  • 当并发请求数增加到150时,React PHP和PHP开发服务器都崩溃并抱怨请求过多。Road Runner可以毫无问题地处理。

Road Runner之所以最优秀,是因为它生成四个工作进程并在它们之间分配负载,非常有效地利用所有核心。React PHP由于只使用一个核心,无法与之竞争,但由于每个请求中已经设置的引导程序,它仍然比PHP开发服务器快。

  • 测试是在Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz(4核心)和16 GB RAM的机器上进行的。

在开发您的应用

如您所意识到的,Hermes不使用花哨的yamltomljson配置文件来连接您的服务和引导代码:您必须自己完成所有这些。这使您能够在开发速度的代价下获得完全的灵活性。

我们坚信编程不是魔法,这是为什么Hermes不会帮助您创建CRUD或为您自动生成代码。您有其他HTTP框架来做这些。编程是艰苦的工作:不要试图使用工具来避免编写代码。遵循这些建议,您将看到作为专业人士您将增长多少。

话虽如此,我的意思并不是说您必须亲自编写应用程序的每一个组件。在可能的情况下,请依靠库,特别是那些可互操作的库。您可以使用PSR-15 Middleware构建一个相当稳固的HTTP层。

对于不太可互操作的库,实现适合您应用程序的合同并创建适配器。不要因为不遵循最佳实践而将自己锁定在某个供应商上。

在容器中注册服务,并从这里连接一切。这将帮助您简化启动过程。别忘了编写代码注释,因为它们现在对某些组件来说是必要的,这样人们可以轻松找到服务定义。