php - 如何在 PHP(Laravel 5) 中为我的站点的所有传入连接保留单个类实例?

标签 php laravel web laravel-4 laravel-5

我正在开发一个基于 Laravel 5 的 Web 应用程序,我有一个作为单例实现的“Connection”类

<?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;

}

现在我面临的问题是,每当连接首次获取实例并实例化它并打开连接时,但是当其他用户访问同一页面(较早的用户访问过)时,就会重新打开连接(即类再次实例化),openConnection() 一次只能提供一个连接,当新用户打开连接时,前一个连接将关闭。

是否有任何解决方案可以使用单个连接来处理多个用户请求?

注意:- 上面的代码只是对实际问题的抽象,以获得一个想法。

感谢您的帮助。

最佳答案

如果我正确地阅读了您的问题,您是在询问是否可以根据一个请求打开一个连接,然后让访问该页面的其他用户使用该连接而不重新打开它。

从纯粹的 PHP 层面来看,你的问题的答案是否定的。 PHP 被设计为一个无状态系统。进入系统的每个请求都会迫使程序建立其状态,然后该状态会在每次连接结束时丢失。这符合当时的系统设计风格,都是模仿HTTP。您描述的模式在桌面或服务器计算编程环境中更常见,其中应用程序驻留在内存中。

您将在 PHP 中找到第三方库,它们支持您所讨论的持久连接。例如,oracle 驱动程序 (oci8) 具有 connect function ,以及 pconnect function 。后者实现了持久连接。这些库可以做到这一点,因为它们是用 C/C++ 实现的——即,不是纯 PHP。此外,每个库对于“持久”的含义都有自己的规则。

当您在 PHP 中实现单例时,您得到的对象将始终是仅针对该请求的单例对象。它与 Java 中的单例类似,但由于 PHP 的运行时模型截然不同,因此最终在 PHP 中使用单例的方式与在 Java 等系统中使用单例的方式非常不同。

希望有所帮助,祝你好运!

关于php - 如何在 PHP(Laravel 5) 中为我的站点的所有传入连接保留单个类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29186998/

相关文章:

php - 如何在PHP中操作图像文件的各种元信息

javascript - 使用vue动态改变主体背景

java - 如何让 session 不超时?

javascript - 保持按钮处于事件状态,直到再次点击

php - 以数据库base64格式存储的图像如何在PHP中以原始格式检索它

php - 如何使用 php 将数据存储在图像中?

php - Laravel 如何在创建 7 天后删除数据库记录

php - 如何使用 Laravel 发送电子邮件?

javascript - AngularJS - 为什么应用程序没有路由?

php - 如何根据下拉列表更改操作链接?