免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1868 | 回复: 0
打印 上一主题 下一主题

php全局变量问题,求救。。。 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2012-08-22 07:54 |显示全部楼层
本帖最后由 fiendcly 于 2012-08-22 08:11 编辑

這種情況你要建立一個 Process , 讓它一直 Work.

不過這種長時間 Work 的 Process 不建議你用 PHP.

因為 PHP 是 Script 語言 , 加上它一直以來都是 透過~FAST-CGI 或 PHP-FPM 與 HTTP SERVER 溝通.

它們的溝通方式也一直都是用 短連結 ( SOCKET 連結溝通完就斷開 ) 的方式溝通.

我記得九年前在我還不是很懂 PHP 特性時我常不小心犯這種錯.

把 PHP 當一個 DEAMON 而服務常無故斷掉. ( PHP 的記憶體控制很差 ) , 因為專案己經寫了一陣子無耐只好 寫支 watch dog 每分鐘去檢查服務是不是還在.

所以我很來一律都用 crontab -e  每分鐘做一次.

但是這次你的需求是每20秒做一次.

我建議你用 C/C++ 做一個 長時間的 PROCESS 來解決這個問題.

長時間背景執行這個 PROCESS 的語法

nohup php -q test.php <<< 類似這樣 但是不建議你這麼做 改成用C

nohup ./test << 這樣會好很多

################################

解法很多種 :

1. 將 你要的邏輯 用 PHP 或 C 寫一個無窮迴圈 , 然後 做成 Unix Socket 或 TCP socket 的 長時間 Process 供 SCRIPT 使用 SOCKET 去訪問.

以下是 C 的範例 :
################

void main ()  
          while(true){
                           
                      .........................
                      監控邏輯() ;

                      回覆監控結果();

                      soekct() ;
  
                       bind()
               
                       listen()
                                
                       accept();

                       read()
                              
                                請取 CLIENT 端的邏輯();

                       write()

                               回覆監控結果();

                      sleep(20) ;

                     

          }

################

2. 建議一個長時間的 Process , 然後 每 20秒 丟進 Memcache ( 如果你不熟 Socket Server 的寫法 ) , 然後再用 PHP 去讀它.


3. 比較笨的方法 :

把 PHP 當一個 Process , 如果服務常無故斷掉. ( PHP 的記憶體控制很差 ) ,寫支 watch dog 每分鐘去檢查服務是不是還在.




PS :

如果你不熟 C/C++ , 對編譯也不是很有經驗.

可以用 Pyrhon 寫這個服務.

我有陣子都用 Python 取代 PHP 做 SCRIPT.

穩定性和效能 比 PHP 好很多.

因為它在第一次執行完後會 Build , phc 檔出來.

比起 PHP 在長時間工作的 Process 相比 , 相對的穩定非常多。




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP