代码之家  ›  专栏  ›  技术社区  ›  Aaron Yodaiken Stephen Chung

“长寿命”php对象可能吗?

  •  4
  • Aaron Yodaiken Stephen Chung  · 技术社区  · 14 年前

    有没有可能将一个对象加载到内存中,它可以用于每个请求,而不是为每个请求重新创建 ?

    我见过有人用 $_SESSION 变量,但这似乎是a)丑陋的,b)会占用服务器上的大量空间,c)并不能真正做到我所需要的,因为这是一个会话一个会话的事情。

    $_ALL_SESSIONS ? ;)

    (或者,从另一个角度来探讨这个问题,每次用标准Apache mod php安装加载页面时,是否都会将纯静态对象加载到内存中?)

    5 回复  |  直到 14 年前
        1
  •  3
  •   VolkerK    14 年前

    你或多或少是在寻找一个ASP/IIS的等价物 Application object 在PHP中。一个也没有。

    有例如(persistent\u list),一个“objects”的列表,在请求被服务后,这些“objects”不一定被移除。它被mysql\u pconnect()、pg\u pconnect()、。。。但是脚本代码不能直接访问它。

    memchache 已经提到了。你能详细说明一下“纯静态对象”吗?

        2
  •  3
  •   Edward Dale    14 年前

    也许你可以序列化它并将其存储在memcache中?我不知道那会不会更快。

        3
  •  1
  •   Vilx-    14 年前

    不是默认的,不是。你必须使用一些变通方法,不管是第三方工具(memcached、DBMS等),还是内置机制(会话、序列化到文件等),它是否比为每个记录重新创建对象更快取决于你。

    您也可以为此编写一个PHP插件。:)或者已经有了。一个快速的谷歌搜索没有发现什么,但我没有很努力。

    如果你决定自己写一本,要知道它并不像听起来那么简单。例如,像Apache这样的web服务器会产生几个子服务器 过程 用于并行处理请求。你要想把数据传达给他们就得很棘手。更不用说正确的锁定(以及在请求挂起时打破锁定)、web服务器集群的处理等等。

        4
  •  1
  •   Paul Dixon    14 年前

    您可以使用PHP的CLI版本来编写一个“daemon”应用程序,它可以跨请求持久化并维护状态等,然后有一个基于web的常规脚本,它可以通过套接字或其他机制与之通信( here's one example

        5
  •  0
  •   naugtur    14 年前

    如果服务器是您自己的机器,那么应该可以在后台运行一个进程来执行“全局操作”。你可以用SOAP和它通信。

    您只需要创建一个SOAP对象。

    老实说,我不认为您的对象太大太复杂,以至于创建和填充它的时间比进行SOAP调用的时间要长。但是如果创建这个对象需要大量的数据库连接-我的想法可能会有帮助。。。