我假設對於每個頁面請求,web服務器(例如Apache)都會在內存中創建一個腳本的新實例。這些實例在運行時可以相互通信嗎?並傳遞數據呢?同一個PHP腳本的實例可以交叉通信嗎?
1
A
回答
3
如果您想在PHP腳本之間傳遞數據,建議使用memcached或數據庫。或者可能是APC。
如果腳本屬於同一個會話,它們理論上可以通過會話進行通信,但這在大多數情況下實際上是單向通信,因爲在任何時候只有一個腳本可以訪問會話(session_start()lock會話直到該腳本隱式或顯式結束會話)。
1
PHP腳本運行的模型並沒有真正包含這些腳本的內存中任何類型的持久化的概念,因爲通常它們被設計爲只運行服務所請求頁面所需的最少時間。這使得這些腳本之間的有狀態通信很難有任何有意義的用途,因爲通常一旦頁面被提供,腳本就沒有更多的工作了。因此,通常PHP腳本之間的任何通信都是通過操作數據庫條目等來完成的。
如果您有某種應該發生的連續處理需要傳遞數據,則可能需要查看其他Web應用程序模型(如servlet)。
1
你應該能夠與一些共享內存要做到這一點,如下所述:http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/(假設你沒有在Windows上運行)
2
我相信馬丁和克萊的建議是有效的。我的選擇將是腳本最終目標的功能。
- 你會投擲多少數據?你能處理外部過程的開銷嗎?
- 你交換什麼樣的數據?它是否正常化?還是現在值得正常化?
- 您是否需要稍後參考該數據?還是可以在處理後丟棄它?
這些腳本會運行在不同的服務器上嗎?
平面文件,具有鎖定機構
- 關係DB
- 文獻DB(鍵/值存儲,是否持續性或不)
- 共用存儲器(APC,或核心功能)
- 消息隊列(Active MQ和公司)
我想你會通過外部化過程獲得最大價值,因爲您可以有多臺計算機管理消息/數據d多於一個生產/消費它們。
相關問題
- 1. JBoss實例可以通信嗎?
- 2. GWT:多個腳本實例通信
- 3. python腳本可以知道同一腳本的另一個實例正在運行...然後與它交談?
- 4. MongoDB的單一實例可以同時用於.NET和PHP嗎?
- 5. 交叉腳本
- 6. 多個通道可以使用相同的LengthFieldBasedFrameDecoder實例嗎?
- 7. Silverlight可以通過瀏覽器實例檢測或通信嗎?
- 8. 一個三個PHP腳本,可能嗎?
- 9. 可以StringBuilder替換一個實例嗎?
- 10. 交叉模塊通信zend框架php
- 11. Cloudbees應用程序中的實例可以直接通信嗎?
- 12. 我可以實例化來自另一個Beanshell腳本的beanshell類嗎?
- 13. Cakephp交叉對話的多個實例
- 14. 類可以實例化另一個類嗎? (PHP)
- 15. 我可以從同一個Apache實例運行LAMP和Rails嗎?
- 16. POJO和CDI bean可以從同一個類實例化嗎?
- 17. 同步Greasemonkey腳本的多個實例
- 18. php腳本可以從cron運行的實例數量有限
- 19. 你可以禁止本地實例化一個類嗎?
- 20. 你可以選擇從一個實例到另一個實例的表嗎?
- 21. GCC可以交叉編譯AIX嗎?
- 22. 我們可以交叉加入EF嗎?
- 23. 我可以通過java運行交互式腳本嗎?
- 24. 2個Firefox插件(交叉擴展通信)之間的通信
- 25. Python可以運行包含自己數據的每個實例的腳本的多個實例嗎?
- 26. PHP腳本可以重用相同的變量嗎?
- 27. Memcached的兩個單獨實例是否可以相互通信?
- 28. Selenium可以通知腳本錯誤嗎?
- 29. Java:我可以爲同一個變量獲取不同的類實例嗎?
- 30. 會話可以轉移到不同的域指向同一個CF實例嗎?
好東西,但很多講課,試圖偏離一個很好的答案! – 2009-09-16 01:26:13