0

众所周知,PHP 在“无共享”的哲学中工作。因此,它受到严重的性能限制。

虽然编译后的脚本可以通过一些缓存扩展来加速,但我们无法避免非常繁重的初始化(例如,我们有一个 Web 服务,每次调用都至少需要解析和引导 DTO 模式、设置数据绑定、连接数据库(持久性 mysql从这个角度来看,连接真的很脏),打开另一个远程服务等等)。

ReactPHP框架似乎也解决了这个问题,但是......是否存在任何轻量级的非框架解决方案?从 hack 方式、单文件示例到轻量级库(不是框架)的任何内容都可以接受。不需要复杂的网络服务器重新创建功能。只处理普通的 POST 请求就足够了。

<offtopic>

任务本身是如此重要,所以我想知道为什么 PHP 还没有提供这个开箱即用的功能......

</offtopic>

4

2 回答 2

1

一种很好的方法是使用一个 CLI 脚本,它就像您的普通 Java/nodeJS 服务器一样。并使用轻型 PHP 网关接收 HTTP 请求,并通过套接字从 CLI 获取所需信息。

一个有趣的阅读是http://liveforeverbook.info/blog/2008/01/31/persistent-web-apps-in-php/

关键在于 CLI 脚本将消息存储在内存中(如 Java 服务),并通过基于 Web 的 PHP“网关”与客户端通信。

IRC 服务器 <--> PHP 网关 <--> 客户端 网关步骤实际上不是必需的,但如果 IRC 服务器直接连接到网络,它有助于过滤掉可能通过的垃圾。

您从控制台 (php server.php) 启动作为脚本运行的 IRC 服务器,然后让它继续运行。CLI 脚本没有超时,因此它会一直运行,直到您手动将其关闭。

于 2017-09-08T13:24:13.783 回答
1

是否存在任何轻量级的非框架解决方案?从 hack 方式、单文件示例到轻量级库(不是框架)的任何内容都可以接受。

取决于你在寻找什么。您将需要某种事件循环/调度程序,这主要是amphp/amp/react/event-loop提供的。如果你不想死在回调地狱中,你需要某种形式的 promise 实现,由amphp/amp/提供react/promise

如果您将这些部分视为一个框架并且不想使用它们,您当然可以自己编写它们。但是话说回来,您正在寻找稳定的软件,其中任何一个都将比您自己的实现更稳定,因为它们的使用范围更广,并且报告并修复了错误。

这些基础之上的任何东西都只是库。您可以使用它们,也可以自己编写。如果您碰巧只需要一个套接字服务器,为什么不尽可能使用已经处理 PHP 边缘情况的库呢?

不需要复杂的网络服务器重新创建功能。只处理普通的 POST 请求就足够了。

哦,什么是复杂的网络服务器?“只是”处理普通的 POST 请求?您将需要一个 HTTP 协议解析器来正确处理流水线请求,解码分块编码,如果您想处理上传的文件,则需要一个多部分解析器等。

如果您只是想在单个 PHP 进程中处理多个请求而无需重复引导,我建议您查看PHP-PM,但此时它还没有准备好生产。

于 2017-09-17T08:48:31.747 回答