3

我正在用 PHP 编写一个有状态的 Web 应用程序,其中状态可能包含很多对象。此时,我将所有这些对象保存在 $_SESSION 中,并在请求结束时将它们序列化。这有点痛苦,因为序列化整个会话需要几秒钟,而反序列化则需要更多时间。

我想尝试 APC,因为我希望这些对象只是被内存复制,而不是序列化。唉,似乎如果我提供apc_store($object)一个对象,它似乎无论如何都会在将它传递给另一个进程之前对其进行序列化。(故事是在没有序列化的情况下复制原始值和数组,但这对我来说不是一个相关的解决方案,因为我的会话对象有很多(循环)引用。)

我的问题:有没有一种已知的方法可以在 PHP 中保持对象的持久性,而不必在每次请求后对它们进行序列化?我听说HipHop解释器可以帮助解决这个问题,但我没有在网上找到任何工作示例。有人可以告诉我在 PHP 中是否可行?

(我知道,我应该用 Java 或其他支持没有 TCP 连接的持久实例的语言来编写这个项目)

4

1 回答 1

3

每当您需要存储(冻结)对象时,都需要对其进行序列化。这与存储(APC、会话文件、数据库等)无关,这是因为脚本进程将终止,并且在下次启动时,对象需要再次活跃起来。

所以东西不能保持在“运行状态”,对象总是会被序列化来存储。

众所周知,PHP 序列化并不是最快的。它有其他实现,您可以使用,例如igbinary PHP extension。它在透明会话处理旁边提供了序列化/反序列化功能。也许这实际上对您的方案有帮助。

在任何情况下:您在会话中存储的越多,在请求开始时您需要解冻或唤醒的越多,花费的时间就越多。

相关:什么是 php_binary 序列化处理程序?

于 2011-07-31T10:47:43.553 回答