在php上使用fork以及socket的sample
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-26
mp;#125; //這裡是整個程式的開頭,程式從這邊開始執行 //這裡首先執行一次fork $PID=pcntl_fork(); if($PID==-1) die("could not fork"); //如果$PID不為0表示這是Parrent Process //$PID就是Child Process //這是Parrent Process 自己結束掉,讓Child成為一個Daemon。 if($PID) die("Daemon PID:$PID\n"); //從這邊開始,就是Daemon模式在執行了 //將目前的Process跟終端機脫離成為daemon模式 if(!posix_setsid()) die("could not detach from terminal\n"); //設定daemon 的訊息處理函數 declare(ticks = 1); if(!pcntl_signal(SIGTERM, "SignalFunction")) die("Error!!!\n"); if(!pcntl_signal(SIGTRAP, "SignalFunction")) die("Error!!!\n"); if(!pcntl_signal(SIGCHLD, "SignalFunction")) die("Error!!!\n"); //建立外部連線的Socket $ServerSocket=socket_create(AF_INET, SOCK_STREAM,SOL_TCP); //設定外部連線監聽的IP以及Port,IP欄位設0,表示經聽所有介面的IP if(!socket_bind($ServerSocket,0,$ServerPort)) die("Cannot Bind Socket!\n"); //開始監聽Port if(!socket_listen($ServerSocket)) die("Cannot Listen!\n"); //將Socket設為nonblock模式 if(!socket_set_nonblock($ServerSocket)) die("Cannot Set Server Socket to Block!\n"); //清空$PID變數,表示目前沒有任何的Child Process unset($PID); while(true) { //進入pooling模式,每隔1秒鐘就去檢查有沒有連線進來。 sleep(1); //檢查有沒有連線進來 @$ConnectedServerSocket=socket_accept($ServerSocket); if($ConnectedServerSocket!==false) { //有人連進來嘍 //起始一個Child Process用來處理連線 $PID=pcntl_fork(); if($PID==-1) die("could not fork"); if($PID) continue;//這是daemon process,繼續回去監聽。 //這裡是Child Process開始 //執行Socket裡函數 ProcessSocket($ConnectedServerSocket); //處理完Socket後,結束掉Socket DestroySocket(); //結束Child Process exit(0); } } ?> |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: PHP伪造referer实例代码下一篇: PHP Socket方式提交的post详解
关于在php上使用fork以及socket的sample的所有评论