PHP支持异步编程吗?

时间:2009-11-15 13:21:02

标签: php asp.net asynchronous

我是PHP的新手。我熟悉支持异步编程的ASP.NET。也就是说,如果一个请求需要做一些I / O工作。建议使用BeginProcess / EndProcess方式对网页进行编程。异步编程是提高可伸缩性的关键。

我想知道在PHP世界中是否存在异步编程(BeginXXXX / EndXXXX)的对应物。

6 个答案:

答案 0 :(得分:1)

在.NET中,BeginXXX / EndXXX范例在很大程度上依赖于线程,而在PHP上,我不确定你是否可以开始一个新的线程(除了PECL package之外)。

FastCGI是大多数解释语言中多线程的替代方案。它不是产生新线程而是使用进程,但是由于产生新进程的成本很高,它会像.NET中的ThreadPool一样保留可重用的进程池。

答案 1 :(得分:1)

如果使用套接字或文件执行I / O,则应分别使用stream_socket_select()或stream_select()(类似于C / C ++中的系统调用)。

这是一个用PHP完成的简单命令行聊天教程: Simple PHP socket-based terminal chat

注意:这不是一般的多线程解决方案,而是一种简单的解决方案,适用于需要“半并行”I / O的情况

答案 2 :(得分:0)

核心具有一组过程控制功能,包括分叉进程的能力。 我不知道我会在Web脚本中使用它们,但之前在命令行脚本中使用过它们。

http://www.php.net/manual/en/book.pcntl.php

http://www.php.net/manual/en/pcntl.example.php

答案 3 :(得分:0)

这是PHP与PHP4和PHP5样本多路复用主题的有趣链接:

http://netevil.org/blog/2005/may/guru-multiplexing

答案 4 :(得分:0)

PHP没有,但是一旦页面加载就可以使用AJAX,这将允许异步请求。

老实说,没有意义。如果你真的想要那个重量级的后端,你最好写一个单独的程序来完成繁重的工作。据我所知,PHP模块是用纯C编写的,所以你应该可以使用它,然后从PHP调用你自己的自定义函数。

答案 5 :(得分:0)

使用stream_select,您可以通过HTTP请求创建子进程。查看http://drupal.org/project/httprl中的代码,了解有关如何执行此操作的一些建议。我打算把这个库推到github,一旦我把它弄得更精致;可以在drupal之外运行的东西。但是现在它住在Drupal的土地上。