2010-03-26 81 views
1

當我第一次見到PHP時,我對共享無體系結構的想法感到驚訝。我曾經參與過一個項目,其可擴展性受到不同HTTP請求之間數據共享的影響。PHP會話與Share-Nothing-Architecture有衝突嗎?

但是,當我繼續我的PHP學習。我發現PHP有會話。這看起來與分享一無所有的想法相沖突。

那麼,PHP會話就是爲了製作ASP/ASP.NET/J2EE的對應技術而發明的?高擴展性網站是否應該使用PHP會話?

回答

1

默認的PHP模型基於每個用戶鎖定會話。這意味着如果用戶A正在加載第1頁和第2頁,並且用戶B正在加載第3頁,則將發生的唯一延遲是第2頁將必須等到第1頁完成 - 第3頁仍將獨立於頁1加載和2,因爲沒有什麼可以分享給不同的用戶。只在給定的會話內。

所以它基本上是一個半數的解決方案,最終可以解決問題 - 大多數用戶不會同時加載多個頁面;因此會話鎖定延遲通常很低。就不同用戶的請求而言,還沒有任何共享。

+0

否 - 一定會處理可能做到這一點(我想尤其是對基於文件的會話處理微軟),即使這樣,如果你是這樣的一個平臺上,你可以永遠做一個明確的session_comit( ) – symcbean 2010-03-26 12:35:30

+0

@symcbean,你的意思是說,在基於Windows文件的會話處理中,所有的HTTP請求都會通過一個鎖來進行不同的會話? 我試了一下。用Firefox和IE訪問我的腳本(在我的問題中)。他們是兩個不同的會議,他們不會互相阻礙。我不確定我對你評論的理解是否正確。 – 2010-03-28 07:40:51

+0

我不確定symcbean是指什麼。 – Amber 2010-03-28 09:45:32

1

PHP允許您編寫自己的會話處理程序 - 因此您可以使用默認的掛鉤來構建自己的語義 - 或者,如果您願意,可以使用內置的功能來生成會話標識並處理瀏覽器端然後編寫自己的代碼來存儲/獲取會話數據(例如,如果您只想在登錄頁面而不是其他頁面在處理過程中鎖定會話數據,那麼使用標準鉤子雖然不是不可能,但這有點棘手)。

我不知道有足夠的瞭解微軟架構的會話處理上發表評論,但有一個在路上的巨大差異是PHP的會話處理,以及什麼是真正被保存在session與J2EE相比。

在大多數頁面中不使用會話會使應用程序執行速度更快,並且可能更容易擴展 - 但您可以對應用程序使用的任何數據進行說明。

C.

+0

Hm〜我對PHP的無共享架構的原始理解可能是不對的。在Web應用程序中,您將始終分享一些內容。會議只是讓分享更容易和易於管理。如果會話數據存儲在外部高速存儲器(如memcache和速度)中。它仍然是可擴展的。任何方式,我相信可擴展性的哲學是消除瓶頸。也就是說,爲了減少共享依賴。 – 2010-03-28 11:09:05