[英]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.