我想写非阻塞应用程序。 我使用apache2,但是我正在阅读关于Nginx及其相对于apache进程的优势。 我正在考虑更换apache的Nginx。 我的问题是,是否有可能用PHP和Nginx编写非阻塞的web应用程序?
或者是一个更好的主意,尝试使用python,使用一些反向代理如uwsgi或gunicorn与Nginx? 或者是学习nodejs的解决scheme?
C非阻塞键盘input
非阻塞的stdio
连接后,非阻塞套接字select返回1
Linux中同时套接字读/写(“全双工”)(特别是aio)
在PHP中编写非阻塞应用程序是可能的,但它可能不是最好的环境,因为它不是在牢记! 使用过程控制库PCNTL,你可以很好地控制你的子进程,但显然不会为其他环境提供相同的易用性。
我不太了解python,但是我个人建议你使用nodejs ! 这是一个相当新的技术,这是真的,但一切都不是阻塞在那里,它的意思是这样的! 基本上你所拥有的是一个单一的线程(你可以在这个新闻版本中扩展),并且从字面上看,除了你所说的不同,所有的东西都将被事件驱动,在处理队列上留下空间预期!
Nodejs真的很容易学习,如果你偶然发现Web应用程序,反正你知道JavaScript! 它仍然没有很大的文件,但有很多准备使用模块,你可以下载和使用一下!
据我所知,有几个库可用于构建非阻塞应用程序。
Skyray,一个PHP的网络库,用C http://github.com/bixuehujin/skyray写的
swoole, https://github.com/swoole/swoole-src
PHPdaemon, https://github.com/kakserpom/PHPdaemon
顺便说一句:我是Skyray的作者,也是swoole的开发者之一。
Swoole是编写非阻塞PHP应用程序的好选择
这里是一个例子:
$fp = stream_socket_client("tcp://127.0.0.1:80",$code,$msg,3); $HTTP_Request = "GET /index.html HTTP/1.1rnrn"; 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 timeoutn"; }); swoole_timer_tick(1000,function() { echo "1000ms intervaln"; });
我还没有看过图钉,但我正在写这个答案指向另一个支持PHP中的非阻塞应用程序的框架:
反应http://reactPHP.org/
它支持将服务器绑定到HTTP或WebSocket,并且可以通过HTTP(通过proxy_pass)转发(使用proxy_pass)请求来与诸如Nginx的网络服务器软件一起使用。 您甚至可以在网络服务器中使用HTTPS,并转发未加密的。 (React缺乏SSL支持。)
目前似乎还没有FastCGI或UWsgi支持,至少在上游项目中没有。
风格类似于编写node.js,您将PHP 5.3+闭包附加到事件,并且它在下面透明地使用了非阻塞套接字。 在这个网站上有很好的例子,所以我不会在这里重复一遍,因为你没有特别要求用例。
更新:我只是看着图钉网站,它不是一个框架或工具来编写问题标题中要求的非阻塞PHP应用程序。 它看起来好像作为解决方案的一部分是有用的。
如果你想要非阻塞的应用程序没有很多的努力,你可以尝试使用图钉 。 我在我的一个应用程序中使用它,它工作得很好。 您可以在作者的博客文章中找到更多信息。 我在现有的项目之上加了这个,几乎不改变现有的代码。
如果你想使用节点,请确保这是正确的工具。 检查堆栈溢出问题,因为已经有了这个问题的答案。 问问自己,如果你的应用程序的想法符合节点的功能。 尝试为什么和何时使用节点js? 以及如何决定何时使用NodeJS? 例如。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。