1

我正在使用Zend HTTP客戶端來實現與第三方服務通信的Web客戶端。我正在考慮將其設置爲單例模式,以便每次調用都可以利用服務中的cookie,這樣我們就不需要每次實例化客戶端的新版本時重新登錄。HTTP客戶端類中的單例模式是否會導致競爭條件?

客戶端將有多個類與它進行通信,可能從一次嘗試所有代碼的多個不同位置進行通信。我擔心,如果有多個實體一次嘗試使用它,單身客戶端會導致競爭條件。

這會成爲PHP HTTP客戶端中單例模式的問題嗎?如果是這樣,是否有任何其他方式來獲得Zend HTTP客戶端的好處,它可以跨多個事務存儲和使用Cookie而不會出現這些問題?

+0

它是PHP ...您將在每次向您的應用程序發出請求時實例化客戶端。將來自此第三方服務的登錄Cookie存儲在會話變量中,並且可供您的應用程序的每個實例重新使用。 –

+0

'我正在考慮將其設置爲單例模式,以便每次調用都可以利用服務中的Cookie,這樣我們就不需要每次實例化客戶端的新版本時都需要重新登錄。::::那有什麼意思????我想你完全錯了什麼單身模式是... – Surace

+0

@Surace告訴我我是一個白癡真的沒有幫助任何人。我知道單身模式是什麼,你只有一個給定類的實例。所以對於一個Zend HTTP客戶端來說,客戶端使用的cookie jar將擁有客戶端連接到的源的所有cookie。如果您在每次使用HTTP客戶端(即不使用單例模式)時重新實例化類的實例,它將創建一個新的空的Cookie jar,其中不包含您希望保留的以前客戶端的cookie 。 – dsw88

回答

0

由於PHP不是多線程的,這本身不應該能夠導致競爭條件。

如果同時存在多個請求並且您使用的是共享資源(例如服務器上的文件),則可能會發生這種情況。在這種情況下,您需要進行適當的鎖定,例如flock()

您也可以在每個會話中存儲cookie,即無共享體系結構;那也應該解決問題。