2012-08-08 73 views
1

如果很多用戶在同一時間調用相同的PHP腳本。執行的順序是什麼? 它會排隊嗎?完成一個會話執行後,它會執行另一個?PHP一次一個地執行PHP嗎?

我對服務器端編程非常陌生。我寫的PHP將訪問數據庫,並使用事務查詢數據庫(意味着如果事務中的任何查詢失敗,則提交併回滾)。如果PHP沒有訂單執行,它會顯得混亂。

[Add]感謝您的回覆,我將更具體地討論這個問題: 它是一款通過PHP與服務器通信的在線遊戲。交易需要確保一切都一致。就像註冊新玩家一樣,我們不希望插入球員「PlayerData」,並且因爲某些錯誤而導致「PlayerInventory」失敗。他們應該成功或失敗的整體。

因此,如果PHP在同一時間執行,那麼「回滾」或「提交」可能會同時回滾或提交由其他PHP運行的交易。

那麼,這是什麼解決方案?

在此先感謝

+0

最好的辦法是將您的腳本同時運行而不是依賴任何特定的運行順序/隊列。 – zerkms 2012-08-08 05:06:37

+0

閱讀「PHP是一種無共享的架構」。 – Tarun 2012-08-08 07:11:35

回答

2

關於您的更新...

每個PHP請求將擁有自己的數據庫連接,所以如果你回滾一個連接,它不會影響其他PHP請求。它很容易:),只要你使用交易,數據庫應該讓你免於不一致的擔憂。

通常是PHP請求使用短壽命的過程,所以如果你有10個併發用戶的每一個都會有他自己的過程中,時刻要求得到滿足的過程中被殺死

+0

謝謝你的澄清! – 2012-08-08 06:51:44

1

,因爲它的用武之地。PHP不會幫助你維持併發修改面對你的數據的完整性,服務器將處理每個請求。這就是說,使用數據庫事務將幫助你保持數據的完整性,因爲它會使多個查詢似乎以某種串行(一個接一個)的方式執行。

如果你的數據庫代碼是在一個事務中,你的DBMS將處理事務的東西,讓你看起來像DB代碼一個接一個地執行(即使這實際上並不是實際發生的)。這假設您的DBMS支持ACID transactions

1

取決於您的網絡服務器。標準的Apache安裝將並行地提供多個子服務請求。如果您有20個孩子,並且有20個人請求相同的腳本,那麼您將同時獲得20個腳本副本。

腳本的每個副本名義上彼此獨立,每個運行的腳本副本之間沒有通信,除非添加通信通道(例如會話,數據庫,共享文件/內存等) 。

如果您不能在數據庫上並行執行多個請求,那麼您必須在數據庫中實現適當的事務和表/行鎖,以防止這些並行請求跺腳在彼此的腳趾上。它們仍然會並行執行,但事務/鎖定將確保實際的數據庫操作將是串行的。