asp與.Net里有Application
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供博白網(wǎng)站建設(shè)、博白做網(wǎng)站、博白網(wǎng)站設(shè)計、博白網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、博白企業(yè)網(wǎng)站模板建站服務(wù),十年博白做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
jsp里有ServletContext
這些都是服務(wù)器對象,存儲的數(shù)據(jù)是可以全局共享的。
但PHP沒有這些,不過可以使用擴(kuò)展組件實現(xiàn),比如Memcache可支持分布式的數(shù)據(jù)共享
#!/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){?//進(jìn)程創(chuàng)建失敗
die('fork?child?process?failure!');
}
else?if($pid){?//父進(jìn)程處理邏輯
pcntl_wait($status,WNOHANG);
}
else{?//子進(jìn)程處理邏輯
pcntl_exec('/usr/local/bin/php',$cmd);
}
}
?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"); // 創(chuàng)建一個Socket
$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n"); // 連接 socket_write($socket, "hello socket") or die("Write failed\n"); // 數(shù)據(jù)傳送 向服務(wù)器發(fā)送消息 while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {
echo("Response was:" . $buff . "\n");
}
socket_close($socket);
因為只有調(diào)用了accept客戶端才能連上,你如果accept下面接一個循環(huán),那么第二個用戶不是說能不能進(jìn)這個循環(huán),而是連不進(jìn)……此時只有第一個用戶break出了循環(huán),然后程序回頭再調(diào)用accept,第二個用戶才能連上。
用多進(jìn)程來處理如何?因為accept一個客戶端以后,應(yīng)該是馬上準(zhǔn)備accept下一個客戶端才對,而不是處理完現(xiàn)在這個客戶端才accept下一個客戶端。
socket_accept以后,直接調(diào)用
pcntl_fork(),此時進(jìn)程會分裂為兩個,其中一個的pnctl_fork返回值是0,另一個不是0。不是0的那個直接繼續(xù)調(diào)用socket_accept即可,是0的那個處理客戶端請求。
pnctl_fork不知道在windows下能不能用。
不過返回不是0的那個進(jìn)程并不是這樣就完事了,還要調(diào)用pcntl_wait防止子進(jìn)程卡在那邊沒有完全結(jié)束。你可以在主進(jìn)程里時不時就調(diào)用這個,配上WNOHANG作為option參數(shù)防止沒有子進(jìn)程需要wait的時候卡在那邊。
這都是linux下常用的處理手段。說實話本來我想讓你用多線程的,不過看了一圈不知道php里怎么用線程,倒是找到了用進(jìn)程的方式,所以就
/*
*flock(file,lock,block)
*file 必需,規(guī)定要鎖定或釋放的已打開的文件
*lock 必需。規(guī)定要使用哪種鎖定類型。
*block 可選。若設(shè)置為 1 或 true,則當(dāng)進(jìn)行鎖定時阻擋其他進(jìn)程。
*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);
)
分享標(biāo)題:php多進(jìn)程間共享數(shù)據(jù) linux多進(jìn)程共享數(shù)據(jù)
標(biāo)題路徑:http://www.rwnh.cn/article16/hicjdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站收錄、App設(shè)計、關(guān)鍵詞優(yōu)化、定制開發(fā)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)