AzaAjaxChat笔记-实现

唔,继续整理笔记,这些是在代码编写中遇到的问题和解决办法的总结,不是Turtial,问题有针对性,内容枯燥,路人可以直接忽略~

一、Comet服务器推技术

Comet推技术,一句话概括,就是形成一个不断开的连接,使得服务器能主动向客户端发送信息。这种技术在交互性强的Web产品中应用的非常多,比如GMail。Co met的实现方式有两种:基于 AJAX 的长轮询(long-polling)方式和基于 Iframe 及 htmlfile 的流(streaming)方式,具体两种实现方式可以参考Comet:基于 HTTP 长连接的"服务器推"技术

我计划把这个技术引入,成为一个亮点,第二种Comet实现方式过于复杂(GMail使用的就是这种),我就尝试第一种。我在测试环境测试了基于 AJAX 的长轮询 (long-polling)方式。这种方式说白了就是在Ajax获取返回数据时候,在状态吗为4(数据传输完成)情况随后进行下次查询。进行循环的查询 ...

more ...

AzaAjaxChat笔记-框架

1个月没有动PHP了,新装的系统甚至还没有配置PHP环境,今天看到BooguNote上有一个boo是专门记录AzaAjaxChat开发时候遇到的问题和解决办 法。于是把一些东西整理记录一下。

1. 从ThinkPHP开始

最早的AzaAjaxChat是基于ThinkPHP的,我当时在OpenSouce上看到ThinkPHP的介绍,有很多优点,看的我很心动:MVC模型,Ajax 支持,详细的文档和案例,国人开发的框架。我作为一个PHP新人一下子就被他吸引住了,决定用ThinkPHP做框架。

image

随着系统开发的推进,我却感觉到一些不自在,遇到一些问题却找不好太好的解决办法。比如ThinkPHP的模块和分组两个概念,让我比较疑惑,花费了大量时间重组目录 结构,两种方法各有优劣,让我很难选择(有选择了反而难办了 ^_^)。

最让我恼火的是相对目录带来的路径混乱,在JSP开发中,静态内容习惯性放在webcontent文件夹中,而ThinkPHP的CSS、图片、JS引用让我很疑惑, 要区分App的和Model的静态文件。

在开发过程中,我也遇到过框架本身的Bug,让我对这个框架失去信心。在这里我没有贬低ThinkPHP或者ThinkPHP开发者的意思,他们的"大道至简、开发由 我"的理念很值得欣赏。只是作为初学者因为遇到的一些问题,带来了一定的开发难度,不得已放弃。

2. 选择CakePHP ...

more ...

IE XML 缓存问题

明天开始上交毕业设计初稿,其中有一节是遇到的问题和解决办法。我把平时在BooguNote 中的琐碎片段整理出来,便有了此文。

PS:之前已经有过3篇相关毕设的文章:

[CakePHP的全局变量

](http://log4d.com/2010/05/cakephp-global-variables)

[FMS的80端口占用

](http://log4d.com/2010/05/fms-80-port-used)

[SWFObject 一款JavaScript的Flash检测与插入模块

](http://log4d.com/2010/05/swfobject)

---- 正文开始 ----

问题背景

系统要实现一个操作,即每次向同一个url 请求一个GET方法获取一个xml文件,这个xml文件记录着聊天数据并且是即时生成的。当用FireFox或者Chro me请求时候都能获得正确的数据,而IE则常常出现无法获取实时的XML数据。

而如果在地址栏中填入 http://localhost/AzaAjaxChat/src/Chat/getXml?messageId=41 这个原始的XML文件地址,就可以获取正确的XML文件。并且在下次IE ...

more ...

SWFObject 一款JavaScript的Flash检测与插入模块

今天开始AzaAjaxChat的视频聊天模块,拖FMS的福,实现起来很轻松,不过后来在JavaScript和Flash的交互上遇到了问题。

Flash在各个浏览器中的实现始终是个麻烦的事情,什么Object Embed~,似乎没有什么标准的格式,一般都要做一些浏览器Hack,我对这些深痛恶绝,在 泡了一下午前端相关的论坛后,偶然发现一款JavaScript交互的神器。

image

SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块

SWFObject是一个用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块。该模块中的JavaS cript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优 化的原则的。此外,它能够避免您的 HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。

(即:通过text/html应答页面, 而非application/xhtml+xml)

官方在Google Project Host中,下载的代码包中有一个简单的Example,也包含了SWFObject的源码,感兴趣的同学可以研究一下。

相关链接:

[swfobject - Project Hosting on ...

more ...

CakePHP的全局变量

毕业设计AzaAjaxChat 中有一个功能,记录当前在线用户,直观的看,用Application对象就可以解决。

忙了一会发现,原来PHP没有Application对象这个概念,于是我想到了全局变量,噩梦便开始了。(Application 和全局变量其实完全不是同一个概念)

我使用的框架是CakePHP,查找资料后,找到了几种CakePHP中使用全局变量的方法。

一、使用bootstrap.php文件

在app/config 下面,有一个bootstrap文件,从名字就可以看出,这个是在控制器之前加载的文件,根据官方的描述,有下面几个用法。

  • 定义方便的函数

  • 注册全局常量

  • 定义新增的控制器,视图,控制器路径

通过这个文件可以实现全局变量的声明。

if (!isset ($globalAAC)) {
    global $globalAAC;
    $globalAAC = array (
        'currentMessageId' => -1,
        'onlineUsers' => array()
    );
}

在其他文件中就可以调用这个全局变量了。

二、通过Configure 类

Configure类是CakePHP用来进行配置文件的地方,通过write() 和read()方法 ...

more ...