php多进程间共享数据 linux多进程共享数据

php跨进程数据

asp与.Net里有Application

成都创新互联专业为企业提供博白网站建设、博白做网站、博白网站设计、博白网站制作等企业网站建设、网页设计与制作、博白企业网站模板建站服务,十年博白做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

jsp里有ServletContext

这些都是服务器对象,存储的数据是可以全局共享的。

但PHP没有这些,不过可以使用扩展组件实现,比如Memcache可支持分布式的数据共享

php 如何实现多进程

#!/usr/bin/env php

?php

$cmds=array(

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','mobile',1),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','mobile',2),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','click',1),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','click',2),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php',1),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php',2)

);

foreach($cmds as $cmd){

$pid=pcntl_fork();

if($pid==-1){ //进程创建失败

die('fork child process failure!');

}

else if($pid){ //父进程处理逻辑

pcntl_wait($status,WNOHANG);

}

else{ //子进程处理逻辑

pcntl_exec('/usr/local/bin/php',$cmd);

}

}

php多进程编程时如何共享变量

?php /**

* File name:client.php

* 客户端代码

*

* @author guisu.huang

* @since 2012-04-11

*/ set_time_limit(0);

$host = "127.0.0.1";

$port = 2046;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create socket\n"); // 创建一个Socket

$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n"); // 连接 socket_write($socket, "hello socket") or die("Write failed\n"); // 数据传送 向服务器发送消息 while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {

echo("Response was:" . $buff . "\n");

}

socket_close($socket);

想用PHP做Socket服务器,不知道如何实现同时和多个不同客户端数据交互?

因为只有调用了accept客户端才能连上,你如果accept下面接一个循环,那么第二个用户不是说能不能进这个循环,而是连不进……此时只有第一个用户break出了循环,然后程序回头再调用accept,第二个用户才能连上。

用多进程来处理如何?因为accept一个客户端以后,应该是马上准备accept下一个客户端才对,而不是处理完现在这个客户端才accept下一个客户端。

socket_accept以后,直接调用

pcntl_fork(),此时进程会分裂为两个,其中一个的pnctl_fork返回值是0,另一个不是0。不是0的那个直接继续调用socket_accept即可,是0的那个处理客户端请求。

pnctl_fork不知道在windows下能不能用。

不过返回不是0的那个进程并不是这样就完事了,还要调用pcntl_wait防止子进程卡在那边没有完全结束。你可以在主进程里时不时就调用这个,配上WNOHANG作为option参数防止没有子进程需要wait的时候卡在那边。

这都是linux下常用的处理手段。说实话本来我想让你用多线程的,不过看了一圈不知道php里怎么用线程,倒是找到了用进程的方式,所以就

PHP如何解决多进程同时读写一个文件的方法

/*

*flock(file,lock,block)

*file 必需,规定要锁定或释放的已打开的文件

*lock 必需。规定要使用哪种锁定类型。

*block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。

*lock

*LOCK_SH 要取得共享锁定(读取的程序)

*LOCK_EX 要取得独占锁定(写入的程序)

*LOCK_UN 要释放锁定(无论共享或独占)

*LOCK_NB 如果不希望 flock() 在锁定时堵塞

/*

if (flock($file,LOCK_EX))

{

fwrite($file,'write more words');

flock($file,LOCK_UN);

}

else

{

//处理错误逻辑

}

fclose($file);

)


网站标题:php多进程间共享数据 linux多进程共享数据
转载来于:http://scyanting.com/article/hicjdg.html