我希望编写非阻塞应用程序。我使用apache2,但我读到了关于nginx和其相对于apache进程的优势的信息。我正在考虑将apache更换为nginx。我的问题是,是否有可能使用php和nginx编写非阻塞Web应用程序?
或者使用Python,使用一些reverse proxy(如uwsgi或gunicorn)与nginx尝试实现这一点是否是更好的想法?或者解决方案是学习nodejs吗?
我希望编写非阻塞应用程序。我使用apache2,但我读到了关于nginx和其相对于apache进程的优势的信息。我正在考虑将apache更换为nginx。我的问题是,是否有可能使用php和nginx编写非阻塞Web应用程序?
或者使用Python,使用一些reverse proxy(如uwsgi或gunicorn)与nginx尝试实现这一点是否是更好的想法?或者解决方案是学习nodejs吗?
Swoole是编写非阻塞PHP应用程序的良好选择。
以下是一个示例:
$fp = stream_socket_client("tcp://127.0.0.1:80", $code, $msg, 3);
$http_request = "GET /index.html HTTP/1.1\r\n\r\n";
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\n";
});
swoole_timer_tick(1000, function() {
echo "1000ms interval\n";
});
我还没有看过 Pushpin,但是我写这篇答案是为了介绍另一个支持 PHP 的非阻塞应用程序框架:
React http://reactphp.org/
它支持将服务器绑定到 HTTP 或 WebSocket,并可与 Web 服务器软件(如 Nginx)一起使用,通过 HTTP 转发(使用 proxy_pass)请求到它上面。您甚至可以在 Web 服务器中使用 HTTPS,并将其转发为非加密的方式。(React 中缺乏 SSL 支持。)
目前似乎还没有 FastCGI 或 UWSGI 支持,至少在上游项目中没有。
编写代码的风格类似于 Node.js,您可以将 PHP 5.3+ 的闭包附加到事件上,并且它会在底层透明地使用非阻塞套接字。该网站上有很好的示例,因此,我不会在此重复,因为您并没有特别要求使用案例。
更新:我刚刚查看了 Pushpin 网站,它不是用于编写非阻塞 PHP 应用程序的框架或工具,而是似乎作为解决方案的一部分会很有用。