在PHP中创建Singleton Webservice的最佳方法是什么?

时间:2010-05-17 21:52:21

标签: php web-services singleton

我们需要访问一次只允许一个连接的数据库。这对我来说是“单身”。当然,捕获单个连接将通过Web服务(最可能是基于SOAP的Web服务 - 位于与调用应用程序不同的服务器上)直接或间接地暴露 - 这意味着可能有多个app / instance尝试连接到单例类。

在PHP中,创建全局单例或Web服务单例的最佳方法是什么?

TIA

2 个答案:

答案 0 :(得分:4)

这对我说“使用DB SERVER ”。 ;-),但......

您可以创建SoapServer并使用semaphore一次只允许1个连接

$s1 = sem_get(123, 1);
sem_acquire($s1);

// soapserver code here

sem_release($s1); 

答案 1 :(得分:3)

在PHP中,没有“全局”对象存在于所有请求中。在java webserver中,这将被称为“应用程序级数据存储”。在php中,“全局”范围(使用global关键字)的范围是单个请求。现在,还有一个可通过$ _SESSION访问的跨会话数据存储,但我试图强调,php中没有变量真正是“全局的”。单个值通过存储到本地文件或数据库来模拟全局,但对于像资源这样的东西,您将无法在每个请求上创建它。

现在,在请求级别,您可以创建一个Singleton,它将返回一个初始化资源,无论您调用它的请求中的哪个范围,但同样,该资源不会在请求之间或之间保持不变。我知道, 是php的一个缺点,但另一方面,个人请求的速度和稳定性有助于弥补这个缺点。 修改 在再次阅读了您的问题后,我意识到您可能不会要求单例数据库访问类,而是可以资源锁定您的数据库?根据你的说法,听起来数据库可能会为你锁定。换句话说,如果已经有另一个连接,它将不允许您连接。如果是这种情况,似乎有两种选择: 1)让你的所有页面争用资源,如果他们没有得到它就失败。

2)创建一个队列服务,该服务可以接受查询,运行它们,然后缓存结果供以后检索。