Swa*_*Pal 2 php web laravel laravel-4 laravel-5
我正在开发基于Laravel 5的Web应用程序,我有一个类"连接",它实现为Singleton
<?php
class Connection{
private static $instance = NULL;
private static $connection = NULL;
private function __construct(){
self::connection=API::openConnection(); //just an example of connection (from other class)
}
public function getInstance(){
if(NULL==self::$instance)
{
self::$instance=new Connection;
}
return self::$instance;
}
Run Code Online (Sandbox Code Playgroud)
现在我面临的问题是,每当一个连接获取实例并首次实例化它并打开连接时,但当其他用户访问同一页面(访问过的早期用户)时,重新打开一个连接(即该类被实例化再次),openConnection()一次只能提供一个连接,而当新用户打开连接时,前一个连接关闭.
是否有任何解决方案可以使用单个连接进行多个用户请求?
注意: - 上面的代码只是一个真实问题的抽象,以获得一个想法.
谢谢你的帮助.
如果我正确地阅读了您的问题,您会询问是否可以在一个请求上打开连接,然后让访问该页面的其他用户使用该连接而不重新打开它.
在纯粹的PHP级别上,您的问题的答案是否定的.PHP被设计为无状态系统.进入系统的每个请求都会强制程序建立其状态,然后在每个连接结束时丢失该状态.这与当时的系统设计风格一致,这些风格都是HTTP.您所描述的模式在桌面或服务器计算编程环境中更常见,其中应用程序驻留在内存中.
您将在PHP中找到的是第三方库,它们可以实现您所谈论的持久连接.例如,oracle driver(oci8)具有connect函数和pconnect函数.后者实现了持久连接.这些库可以做到这一点,因为它们是用C/C++实现的 - 即不是纯PHP.此外,每个库都有自己的"持久"含义规则.
当您在PHP中实现单例时,您所获得的是一个对象,它始终只是该请求的单例对象.它与java中的单例概念类似,但由于PHP的运行时模型差别很大,因此最终在PHP中使用单例的方式与在java等系统中使用的方式完全不同.
希望有所帮助,祝你好运!