php实现多用户共享数据,类似jsp的application
sshong 发表于2010年3月23日 10:48:00 更新于2010年3月23日 11:29:00
需求:想要采用AMFPHP实现,多个flash端push数据到php server,这些数据都能保存在server端并且被多个flash端都能访问到,即类似jsp中的application。

结果发现php中并未有提供application,而只有session,而session只是代表一个用户会话,而且用户关闭浏览器就失效,既不能实现persistence,更不能实现多用户share。

为什么php没有提供application呢?
关于此,给大家推荐一个好文以加深理解:
PHP沉思录--工作模型:http://www.bloggern.com/1557.html

1、一开始想用php server端类里面写个static变量,结果行不通。
class TestStatic
{
    private static $i = 0;
    function getI()
    {
        self::$i++;
        return self::$i;
    }
}
结果用amfphp browser查看,每次都返回1。
引申开来,普通php中也无法用static来实现多用户共享数据。
<html>
<?php
class TestStatic
{
    private static $i = 0;
    static function getI()
    {
        self::$i++;
        return self::$i;
    }
}
echo "i的值是 ".TestStatic::getI();
?>
</html>
以上程序是没什么实际意义的,每次都返回1。

原因应该很简单,因为php是个纯解释性的脚本语言,每次浏览器去访问一个php文件,都会重新解释一遍该php文件,一旦解释完成就清空全部此过程中产生的数据、资源等,因此静态不静态只是在这个解释的过程中才有效果,一旦解释完成,就没有任何意义了。

同时,AMFPHP中“每Call一次Method,一个新Object Instance产生。”
来源:Luar's Flash Playground - AMFPHP在Persistent Layer探索

2、sesstion行不通,原因前面有讲。

3、那就只有保存文件或者保存数据库咯。
3.1、搜到个好帖子,有个哥们写的用文件的方式实现多用户共享,
php自写application功能相当于asp中的application

3.2、帖子中也有人提出用mysql的memory表实现内存共享,这个对于jsp类似的application对象完全可行,当然这个可能会随时崩溃,mysql每次启动都会清空数据,只留下一个空表。
关于memory(以前叫heap引擎)的一些资料:
Mysql Memory引擎的简单应用
Mysql的内存表(Memory engine)的问题

4、另外搜到了篇文章: 采用memcache缓存,不过这需要安装memcache扩展。
MYSQL内存(MEMORY)表与Memcache访问速度测试
标签:phpapplicationamfphp分类:PHP阅读:3903
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅