簡體   English   中英

php和apache如何處理多個請求?

[英]How does php and apache handle multiple requests?

PHP如何處理來自用戶的多個請求? 它是一次處理所有這些還是一次處理一個,等待第一個請求完成然后再轉移到下一個請求。

實際上,我在一個靜態網站上添加了一些維基,如果用戶發現它們不准確或者可以改進,那么用戶就可以編輯這些地址。 只有注冊用戶才可以這樣做。 當用戶編輯商家名稱時,該名稱及其他名稱會在表格的不同行中更改。 如果10個用戶同時這樣做,我會擔心會發生什么。 這真是一件混亂的事情。 因此,PHP按照每個腳本(update.php)接收的順序或者同時執行所有操作。

Web服務器(運行PHP腳本)並行處理請求。

更新數據庫中的數據非常快,因此即使您需要更新多個表,任何更新都會立即顯示。

關於mish mash,對於DB,在1秒內處理10個請求與10秒內的10個請求相同,它不會混淆它們並且只是一個接一個地執行它們。

如果您需要更新2個表並且絕對需要這兩個更新隨后運行而不會被另一個更新查詢中斷,那么您可以使用事務。

編輯:

如果您不希望2個用戶同時編輯同一表單,您可以使用多個選項來阻止它們。 以下是一些想法:

  1. 只要用戶打開頁面進行編輯,您就可以“鎖定”該版本的記錄,而不是讓其他用戶打開它進行編輯。 如果用戶在完成記錄后沒有“解鎖”記錄,則可能會遇到一些問題。
  2. 您可以實時(使用AJAX)通知用戶他們正在編輯的條目已被修改,就像在您輸入時發布新答案或評論時的堆棧溢出一樣。
  3. 當用戶提交編輯時,您可以檢查記錄是否在開始編輯之間和嘗試提交時進行編輯,並在其版本旁邊顯示新版本,以便他們手動“合並”2個更新。

可能有更多的解決方案,但這些應該讓你開始。

這取決於您使用的Apache版本及其配置方式,但常見的默認配置使用多個具有多個線程的工作程序來處理同時發出的請求。 請參閱http://httpd.apache.org/docs/2.2/mod/worker.html ,了解其工作原理。 最終結果是您的PHP腳本可能會有幾十個打開的數據庫連接,可能會在同一時間發送多個查詢。

但是,您的DBMS旨在處理此問題。 如果您只是進行簡單的INSERT查詢,那么您的代碼不需要做任何特殊的操作。 您的DBMS將自行處理必要的鎖定。 對於多個INSERT,行級鎖定最快,因此如果使用MySQL,則應考慮使用InnoDB存儲引擎。

當然,無論是由於數據庫連接太多,是否存在唯一索引的沖突等,您的查詢總是會失敗。將您的查詢包裝在try catch塊中以處理這種情況。

如果您有關於並發性的其他應用程序層問題,例如一個用戶覆蓋其他用戶的更改,那么您需要在PHP腳本中處理這些問題。 處理此問題的一種方法是使用與數據一起存儲的修訂號,如果修訂號已更改則拒絕執行查詢,但是如何處理它取決於您的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM