繁体   English   中英

如何使用同一个PHP运行实例处理多个请求?

[英]How to process multiple requests using the same PHP running instance?

众所周知,PHP的原理是“不共享”。 因此,它受到严重的性能限制。

虽然可以通过某些缓存扩展来加速已编译的脚本,但我们无法避免进行非常繁琐的初始化(例如,我们拥有Web服务,并且每次调用至少都需要解析和引导DTO模式,设置数据绑定,连接数据库(永久mysql从这个角度来看,连接确实是肮脏的骇客),打开另一个远程服务等)。

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

<offtopic>

任务本身是如此重要,所以我想知道为什么PHP尚未提供现成的功能……

</offtopic>

做到这一点的一种好方法是使用一个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脚本没有超时,因此它将一直运行,直到您手动将其关闭。

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

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

如果您将这些部分视为框架并且不想使用它们,那么您当然可以自己编写。 但是再一次,您正在寻找稳定的软件,这些软件中的任何一个都将比您自己的实现更稳定,因为它们的使用方式更加广泛,并且已报告并修复了错误。

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

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

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

如果您只是想在一个PHP流程中处理多个请求而无需重复引导,那么我建议您看一下PHP-PM ,但是目前还没有准备好生产。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM