HTTP客户端类中的单例模式是否会导致竞争条件?

时间:2012-09-28 16:22:22

标签: php zend-framework singleton race-condition zend-http-client

我正在使用Zend HTTP客户端实现Web客户端以与第三方服务进行通信。我正在考虑使它成为单例模式,因此每次调用都可以利用服务中的cookie,这样我们就不需要每次实例化客户端的新版本时都重新登录。

客户端将有多个类与之通信,可能来自代码中的几个不同位置同时尝试所有。我担心当多个实体尝试一次使用它时,拥有一个单独的客户端会导致竞争条件。

这是PHP HTTP客户端中单例模式的问题吗?如果是这样,有没有其他方法可以获得Zend HTTP客户端的好处,可以在多个事务中存储和使用cookie而不会出现这些问题?

1 个答案:

答案 0 :(得分:0)

由于PHP不是多线程的,因此单独应该不会导致竞争条件。

如果同时有多个请求并且您正在使用共享资源(例如服务器上的文件),则可能会出现这种情况。在这种情况下,您需要进行适当的锁定,例如flock()

您还可以在每个会话中存储Cookie,即无共享架构;这也应该解决问题。