Laan's steps..

Feed Rss

多实例数据共享

10.12.2008, flash, flex, my works, by .

做过一个flash web聊天室,嵌入到各个页面。于是理所当然,用户在一处登陆了,那么在别的地方的实例应该是也获得了登陆信息。不过这个问题,我以前也是遇到过,后台用 了一个session就可以解决。不过现在比较复杂一点,因为是聊天室,聊天内容应该是共享的。就是说,别人给我发了一条消息,我所运行的所有实例应该都 可以收到,而且都给出提示,比如图标闪动啊。然后,任何一个实例查看了信息,那么别的所有实例就不再提示了,可以停止闪动图标了。
最初所想到的方法就是使用flash的SharedObject, 所有实例中有个主,另外的就是从了。主不断从后台探测数据然后写入到flash共享数据,从不断从共享数据中读取,同时从还判断该数据更新时间,如果过长 则可认定主已经关闭,然后最先发现主已关系的从变成主,开始从后天去数据向共享数据写数据。这样看来是能实现功能的。于是动手写,封装 SharedObject。可是后来在测试中发现一个很大的问题就是,共享数据有延迟。因为flash的共享数据是一个.fso的文件存储的,再不断的读 写中肯定有延迟,而且当运行实例增多时,数据相当乱,各个从所获取的数据很有可能不一样。只能放弃咯。

然后就是使用flash的LocalConnection,原理一样,一个主多个从。不同的是结合到connection,每个实例已加载完便建立一个连 接到数据中心,如果数据中心还没有建立连接失败则马上建立一个本地连接中心。如果连接成功则在连接中心有该实例连接存根,以便连接中心分发数据。如图示:

这样的就解决了延迟问题,因为数据都在内从中,数据获取不再需要读取文件,而是直接由服务中心分发,速度很快。

使用示例:

该项目已在Google code共享。http://code.google.com/p/datasharing/

多实例数据共享 有 4 条回应

  1. 这个不错啊~支持~只能是本机的吗?

    回复
  2. 这个不是bug吧。static属性可以程序间共享的话。不就意味着外部程序可以访问内部?
    另外使用同一套这样代码的两种不同的flash是否可以共享一个数据中心呢?

    回复
  3. @YY
    这个共享其实就是相互发送消息,已数据同步。我封装了一层而已。

    回复
  4. shareobject的应用。不错。有启发性

    回复

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>