利用PHP V5开发多任务应用程序

2008-05-28 16:22 稿源:互联网  0条评论

虽然清单 3 的特殊实现特定于 UNIX?,但是本文中几乎所有实现都将很好地应用于 Windows?(尤其是 Windows 98 以后的版本)或 PHP 的 UNIX 安装。特别地,清单 1 可以托管在任意一个操作系统中。因此,Linux? 和 Mac OS X 都是 UNIX 变体,因此这里所有的代码都可以在两者的任意一种中运行。

按照以下顺序向延迟服务器发出请求。

清单 4. 进程启动顺序

delay=15
delay=12
delay= 9
delay= 6
delay= 3

stream_select 的作用是尽可能快速地接收结果。在这种情况下,它执行的顺序与发出结果的顺序刚好相反。3 秒后,第一个页面已经准备好读取。程序的这一部分也符合常规 PHP —— 在本例中,使用 fread。就像在其他 PHP 程序一样,读取可以很好地通过 fgets 完成。

处理将以同样的方法继续。程序将在 stream_select 停止,直至数据就绪。重要的一点是,只要任何 连接具有数据,不管顺序怎样,程序都将开始读取。这是程序进行多任务处理或并发处理来自多个请求的结果的方法。

注意,这没有对主机 CPU 造成任何负担。经常会遇到这样一些连网程序,以 CPU 使用率急速上升至 100% 的方式在 while 中使用 fread。那种情况不会出现在这里,因为 stream_select 拥有支持立即响应所需的属性(只要有任何读取信息),但是它将在各读取操作间隙的等待时间内产生可忽略的 CPU 负载。

必备的 stream_select() 知识

诸如此类的基于事件的编程并不是最基本的。虽然清单 1 被简化到只包含最基本要素,但是涉及作为多任务应用程序必要元素的回调或协调的任何编码,比简单的程序顺序更让人觉得陌生。在这种情况下,大多数挑战集中在 $read 数组上。注意,它是一个引用;stream_select 将通过改变 $read 的内容返回重要信息。就像指针是 C 的最大绊脚石一样,引用似乎是 PHP 中最让程序员感到棘手的一部分。

有好的文章希望站长之家帮助分享推广,猛戳这里我要投稿

相关文章

相关热点

查看更多

关闭