请稍等...页面即将加载完成

ajax长轮询聊天php版演示

时间: 2011-02-07 / 分类: Ajax应用, 我爱PHP / 浏览次数: 1,321 views / 1个评论 发表评论

        去年(哈哈,就前几天)ht过来说将来竞拍[500pai.com]需要开发一个聊天工具,我也觉得很需要,守着一个拍品什么都不能做实在太痛苦了,我只是想了一下,本来放假想去公司加班,结果公司没开门,该做的事(网关开发)没做成。回来后反正也是闲着就写一个吧。花了一天时间,一个demo就成型了,测试页面:http://www.quou.cn/wp-code/ajax-long-poll/index.php

        对这次练习总结一下吧,最有深刻体验的有两点:1、ajax长轮询请求,2、长轮询中session独占问题
一、长轮询【long polling】
        之前在竞拍开始之前我就听过服务器推送技术【comet】,根据http协议想真正实现服务器推送技术是很困难的,所以可以根据长轮询来代替。原本不确定用什么方法来实现性能最高,所以….打开web.qq抓包测试一下,果然…如果未收到新消息,1分钟请求一次。我还想什么呢,人家是腾讯,那么大堆人想破脑袋都没有找到更好的方法我还瞎折腾啥(有点不激进,哈哈)。说一下长轮询原理是,请求一个页面,没有取得内容一直sleep,比如我在程序中for了60次,每次睡1秒,一旦取得内容break返回开始下一次请求。这次做的竞拍,原来是1秒钟请求一次,现在改为了1秒两次,公司内侧时候很多时候因为服务器撑不住,现在想来这完全可以改变,最需要这样改变的理由是,数据是从memcache缓存中获取(而不是像我从数据库中去查询)。
二、长连接session独占
        对于一个面向用户的网站怎么能没有session呢,这次只是做一个demo,所以尽可能少写文件,多个请求都是在一个页面实现的,结果发现一个页面imsg.php正在长请求[1]中,再发一个请求[2]的时候,页面就挂住了,直到请求[1]结束请求[2]才会被响应。(一开始,再这个地方一直折腾,实验,一行代码一行代码的去掉,结果发现是session_start()作怪,一搜索才发现,php长连接时session会独占页面。)解决办法:自己写一个session_decode方法解释session文件中的内容,本地运行很好,上线就问题来了,线上获取不到session存放路径。所以测试页面验证码,网站签名校验都不能用。

源码下载地址:http://www.quou.cn/download/ajax-long-poll.zip
        前端时间猛然对javascript感兴趣,学了一些,现在写稍微有点感觉了,虽然离高手还差一大截,慢慢来,我当兴趣学,哈哈。 
         除夕在梦大师家过的,本来想明天(看现在时间已经是今天了)请他们吃顿饭然后去看电影,结果他们没时间。明天《青蜂侠》上映,可惜首映,看不起啊啊。算了,我忍了,周末再去。明天和陆鹏、沈伟去看看《武林外传》,截稿,睡觉。

更多
订阅

1个评论

  1. 免费收录
    2011/02/09 于 12:26:49

    博主你好~我是11xp网址导航站长,可以互换友情链接吗?

发表评论

您的昵称 *

您的邮箱 *

您的网站


six + 9 =