Write PHP non blocking applications
我想写非阻塞应用程序。我使用Apache2,但我在阅读nginx及其在Apache进程方面的优势。我正在考虑把Apache换成nginx。我的问题是,是否可以用PHP和nginx编写非阻塞的Web应用程序?.
或者使用一些反向代理(如uwsgi或gunicorn和nginx)尝试使用python来实现这一点是个更好的主意?还是学习nodejs的方法?
用PHP编写非阻塞应用程序是可能的,但这样做可能不是最好的环境,因为创建它时并没有记住这一点!使用过程控制库PCNTL,您可以很好地控制您的子进程,但它显然无法提供与其他环境相同的易用性!
我对Python不太了解,但我个人建议你去玩Nodejs!这是一项相当新的技术,确实如此,但所有的东西都是不受阻挡的,而且它注定是这样的!基本上,您所拥有的是一个线程(您可以在这个新闻版本中扩展您想要的任何内容),并且实际上所有的事情(除非您告诉它做不同的事情)都将是事件驱动的,这会给进程队列留下按预期进行的空间!
nodejs真的很容易学习,如果你偶然发现了web应用程序,你无论如何都知道javascript!它仍然没有大量的文档记录,但是有许多现成的模块可以直接下载和使用!
据我所知,有几个库可用于构建非阻塞应用程序。
顺便说一句:我是Skyray的作者,也是Swoole的开发者之一。
Swoole是编写非阻塞PHP应用程序的好选择
下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $fp = stream_socket_client("tcp://127.0.0.1:80", $code, $msg, 3); $http_request ="GET /index.html HTTP/1.1 "; fwrite($fp, $http_request); swoole_event_add($fp, function($fp){ echo fread($fp, 8192); swoole_event_del($fp); fclose($fp); }); swoole_timer_after(2000, function() { echo"2000ms timeout "; }); swoole_timer_tick(1000, function() { echo"1000ms interval "; }); |
我还没有看过pushpin,但是我写这个答案是为了指出另一个支持PHP中非阻塞应用程序的框架:
反应http://reactphp.org/
它支持将服务器绑定到HTTP或WebSocket,并可以通过HTTP向其转发(使用代理服务器传递)请求,与Web服务器软件(如nginx)一起使用。甚至可以在Web服务器中使用HTTPS并转发未加密的内容。(React中缺少SSL支持。)
似乎还没有fastcgi或uwsgi支持,至少在上游项目中没有。
该样式类似于编写node.js,将php 5.3+闭包附加到事件中,并在下面透明地使用非阻塞套接字。那个网站上有一些很好的例子,所以我不会在这里重复这些例子,因为您没有特别要求一个用例。
更新:我刚刚查看了pushpin网站,它不是一个框架或工具,用于按照问题标题中的要求编写非阻塞的PHP应用程序。不过,作为解决方案的一部分,它似乎确实很有用。
如果你想在不费吹灰之力的情况下使用非阻塞应用程序,你可以尝试使用图钉。我在我的一个应用程序中使用它,效果很好。你可以在作者的博客上找到更多信息。我在现有项目的基础上添加了这个,几乎没有更改现有代码。
如果要使用节点,请确保这是适合该作业的工具。检查堆栈溢出问题,因为已经有了该问题的答案。问问自己,您的应用程序想法是否适合节点功能。尝试使用节点JS的原因和时间?如何决定何时使用nodejs?例如。