thinframe/karma

用PHP编写的实验性HTTP服务器

v0.2.1 2014-01-26 22:17 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:57:41 UTC


README

#Karma

新一代PHP框架

Latest Stable Version Latest Unstable Version License

##当前一代存在的问题是什么?

为了解释当前的问题,让我先简单描述一下PHP网站是如何工作的

  1. 用户从他的浏览器向运行PHP的网站发出请求

  2. HTTP服务器接收该请求并以不同的方式处理它

    • Apache直接执行与请求路径关联的PHP脚本并返回输出

    • Nginx使用PHP-FPM来完成基本上相同的事情。

  3. HTTP服务器将响应发送回客户端

到目前为止一切都很好,但让我们深入一点。当一个PHP脚本执行时,以下事情会发生

  1. 加载必要的依赖项,懒惰地或一次性,并配置/初始化所有组件。

  2. 根据请求执行您的逻辑,并返回响应。

但在这个过程中有一个问题,因为这两个步骤中的任何一个都会在每次执行时执行。哦,好吧...

第一步会在每个请求上执行,从我个人的观点来看,这是PHP应用程序的瓶颈,因为I/O操作非常昂贵。

##已存在的解决方案

  • 使用像Symfony2一样的启动文件。
  • 投资硬件。如果您有钱,这是一个很好的解决方案。
  • OPcache
  • 等等...

##新的方法... ?

Tom & David Kelley,即《创新自信》一书的作者,以及IDEO公司的所有者,在他们的书中说,解决现有问题的最佳方法是重新思考导致该问题的整个过程。但这个问题是设计出来的。PHP就是这样制作的,对吧?

解决方案

一段时间前,我发现了ReactPHP,这是一个提供事件驱动、非阻塞I/O的PHP库。它从NodeJS中受到启发,非常棒。我试了试,做了一些测试,然后一个想法浮现在我的脑海中

为什么不使用两个程序来完成一项工作,HTTP服务器和PHP,而使用一个既充当HTTP服务器又充当PHP框架的程序呢?

基本上,我们将HTTP服务器和服务器背后的PHP框架合并成一个用PHP编写的单一程序,它将完成这两项任务。这样我们就可以消除PHP依赖项的重复加载/初始化时间,并节省一些HTTP服务器和PHP之间丢失的时间。

痛苦吗?根本不。

##Karma

Karma是一个充当HTTP服务器和PHP框架的PHP应用程序。它提供了一个易于使用的抽象层,覆盖与套接字工作相关的一切,这样开发者就可以专注于他们的工作。它速度快,响应时间比传统框架快80%到90%,并且与现有的PHP组件(如Twig)一起工作。

它使用Symfony Routing组件提供内置的路由,并且整个架构都是围绕Symfony Dependency Injection Container构建的。大多数套接字工作由ReactPHP组件处理。基本上,它是使用现有的PHP组件构建的。

##安装

composer create-project thinframe/karma-project <project_name> --stability=dev

如果您想使用具有完成支持的命令行组件,请在项目根目录中执行以下命令

bash bin/thinframe-installer

从现在开始,您可以在您拥有的每个 karma 项目文件夹中使用 thinframe 命令。否则,您可以使用 bin/thinframe 代替 thinframe

##用法

要查看所有可用的命令,请执行以下命令:thinframe help。很简单。

  help                   - Show this list

  server run             - Start the HTTP server

  server run --daemon    - Start the HTTP server as a daemon

  server stop            - Stop the HTTP server

  server status          - Check HTTP server status

  server restart         - Restart the HTTP server

  server monitor         - Restart the HTTP server when source files are changed

  debug routes           - Show all routes

  debug applications     - Show all loaded applications

要测试设置,运行 thinframe server start 并在浏览器中访问 https://:1337。如果您看到一个默认的 Karma 页面,那么一切正常。

默认情况下,当您安装 karma-project 时,它会创建一个引导项目。所有项目相关文件都位于 src/Acme/DemoApp

(待续...)

##待办事项

  • 编写单元测试和功能测试

  • 优化内存

  • 更多文档

  • 实现 PsySH

  • 更多日志记录

  • 各种功能

  • 在所有 Linux 发行版上进行测试。

##操作系统支持

到目前为止,它已经在 Ubuntu 和 Elementary OS 上进行了测试。它应该在其他 Linux 发行版上运行得相当好。

##依赖项

##善意提醒

该项目是实验性的。我建议不要在生产环境中使用(目前)。