thinframe / karma
用PHP编写的实验性HTTP服务器
Requires
- php: >=5.4.0
- filp/whoops: dev-master
- monolog/monolog: @stable
- symfony/routing: @stable
- thinframe/annotations: @stable
- thinframe/applications: @stable
- thinframe/command_line: @stable
- thinframe/events: @stable
- thinframe/foundation: @stable
- thinframe/inotify: @stable
- thinframe/pcntl: @stable
- thinframe/server: @stable
This package is not auto-updated.
Last update: 2024-09-24 02:57:41 UTC
README
#Karma
新一代PHP框架
##当前一代存在的问题是什么?
为了解释当前的问题,让我先简单描述一下PHP网站是如何工作的
-
用户从他的浏览器向运行PHP的网站发出请求
-
HTTP服务器接收该请求并以不同的方式处理它
-
Apache直接执行与请求路径关联的PHP脚本并返回输出
-
Nginx使用PHP-FPM来完成基本上相同的事情。
-
-
HTTP服务器将响应发送回客户端
到目前为止一切都很好,但让我们深入一点。当一个PHP脚本执行时,以下事情会发生
-
加载必要的依赖项,懒惰地或一次性,并配置/初始化所有组件。
-
根据请求执行您的逻辑,并返回响应。
但在这个过程中有一个问题,因为这两个步骤中的任何一个都会在每次执行时执行。哦,好吧...
第一步会在每个请求上执行,从我个人的观点来看,这是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 发行版上运行得相当好。
##依赖项
-
PHP >= 5.4
-
ext-inotify - https://php.ac.cn/manual/en/inotify.install.php
##善意提醒
该项目是实验性的。我建议不要在生产环境中使用(目前)。