PHP中实现非阻塞模式
程序非阻塞模式,这里也可以理解成并发。而并发又暂且可以分为网络请求并发
和本地并发
。
先说一下网络请求并发
理论描述
假设有一个client,程序逻辑是要请求三个不同的server,处理各自的响应。传统模型当然是顺序执行,先发送第一个请求,等待收到响应数据后再发送第二个请求,以此类推。就像是单核CPU,一次只能处理一件事,其他事情被暂时阻塞。而并发模式可以让三个server同时处理各自请求,这就可以使大量时间复用。
画个图更好说明问题:
前者为阻塞模式,忽略请求响应等时间,总耗时为700ms;而后者非阻塞模式,由于三个请求可以同时得到处理,总耗时只有300ms。
代码实现
<?php
echo "Program starts at ". date('h:i:s') . ".\n";
$timeout = 3;
$sockets = array(); //socket句柄数组
//一次发起多个请求
$delay = 0;
while ($delay++ < 3)
{
$sh = stream_socket_client("localhost:80", $errno, $errstr, $timeout,
STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
/* 这里需要稍微延迟一下,否则下面fwrite中的socket句柄不一定能真正使用
这里应该是PHP的一处bug,查了一下,官方bug早在08年就有人提交了
我的5.2.8中尚未解决,不知最新的5.3中是否修正
*/
usleep(10);
if ($sh) {
$sockets[] = $sh;
$http_header = "GET /test.php?n={$delay} HTTP/1.0\r\n";
$http_header .= "Host: localhost\r\n";
$http_header .= "Accept: */*\r\n";
$http_header .= "Accept-Charset: *\r\n";
$http_header .= "\r\n";
fwrite($sh, $http_header);
} else {
echo "Stream failed to open correctly.\n";
}
}
//非阻塞模式来接收响应
$result = array();
$read_block_size = 8192;
while (count($sockets))
{
$read = $sockets;
$n = stream_select($read, $w=null, $e=null, $timeout);
//if ($n > 0) //据说stream_select返回值不总是可信任的
if (count($read))
{
/* stream_select generally shuffles $read, so we need to
compute from which socket(s) we're reading. */
fo
相关文档:
function file_list($path) {
$handle = opendir($path);
if ($handle) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($path."/".$file)) {
echo "<br /><br /><b> ......
1: apache服务器安装.apache_2.0.59-win32-x86-no_ssl.msi。
修改conf\httpd.conf中的文件,修改位置为:
DocumentRoot "c:/webpage" 设置虚拟目录 c:/webpage.
DirectoryIndex index.html index.html.var index.php
==使apache服务器识别php的扩展名。
在<Directory "c:/pr ......
<?php
//获得系统时间函数(注意参数中大写Y代表完整年份,小写y代表年份简写)
$sum = date("Y-m-d");
$sum1 = date("y-m-d");
echo "$sum<br/>";
echo "$sum1<br/>";
//md5加密函数
$pass = md5("张三");
......
编码是个很基础的问题,也是大家很容易忽略的问题,写代码之前多多考虑,以后会少很多麻烦。
PHP发展了不少,现在pear用起来很方便,其中就有相关的class来读取Excel文件里面的内容,如果不想使用pear的话,可以考虑使用excel_class.php,google一下,可以找到这个class的source code下载,也能找到基本的example c ......
再次之前先说一个网址:https://www.paypaltech.com/SG2/
这个是生成paypal IPN的网址,这样说吧,是替你生成代码的网址(非常的好)!不懂没关系!先知道一下!
下载教程网址:http://download.csdn.net/source/2225766
http://download.cs ......