快速业务通道

在php上使用fork以及socket的sample

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-26
mp;#125;
//這裡是整個程式的開頭,程式從這邊開始執行
//這裡首先執行一次fork
 
$PID=pcntl_fork&
#40;);
 
if&
#40;$PID==-1) die("could not fork");
//如果$PID不為0表示這是Parrent Process
//$PID就是Child Process
//這是Parrent Process 自己結束掉,讓Child成為一個Daemon。
 
if&
#40;$PID) die("Daemon PID:$PID\n");
//從這邊開始,就是Daemon模式在執行了
//將目前的Process跟終端機脫離成為daemon模式
 
if&
#40;!posix_setsid()) die("could not detach from terminal\n");
//設定daemon 的訊息處理函數
 
declare&
#40;ticks = 1);
 
if&
#40;!pcntl_signal(SIGTERM, "SignalFunction")) die("Error!!!\n");
 
if&
#40;!pcntl_signal(SIGTRAP, "SignalFunction")) die("Error!!!\n");
 
if&
#40;!pcntl_signal(SIGCHLD, "SignalFunction")) die("Error!!!\n");
//建立外部連線的Socket
 
$ServerSocket=socket_create&
#40;AF_INET, SOCK_STREAM,SOL_TCP);
//設定外部連線監聽的IP以及Port,IP欄位設0,表示經聽所有介面的IP
 
if&
#40;!socket_bind($ServerSocket,0,$ServerPort)) die("Cannot Bind Socket!\n");
//開始監聽Port
 
if&
#40;!socket_listen($ServerSocket)) die("Cannot Listen!\n");
//將Socket設為nonblock模式
 
if&
#40;!socket_set_nonblock($ServerSocket)) die("Cannot Set Server Socket to Block!\n");
//清空$PID變數,表示目前沒有任何的Child Process
 
unset&
#40;$PID);
 
while&
#40;true)
 
&
#123;
//進入pooling模式,每隔1秒鐘就去檢查有沒有連線進來。
  
sleep&
#40;1);
//檢查有沒有連線進來
  
@$ConnectedServerSocket=socket_accept&
#40;$ServerSocket);
  
if&
#40;$ConnectedServerSocket!==false)
  
&
#123;
//有人連進來嘍
//起始一個Child Process用來處理連線
   
$PID=pcntl_fork&
#40;);
   
if&
#40;$PID==-1) die("could not fork");
   
if&
#40;$PID) continue;//這是daemon process,繼續回去監聽。
   //這裡是Child Process開始
   //執行Socket裡函數
   
ProcessSocket&
#40;$ConnectedServerSocket);
  //處理完Socket後,結束掉Socket
   
DestroySocket&
#40;);
  //結束Child Process
   
exit&
#40;0);
  
&
#125;
 
&
#125;
?>

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号