收起左侧

[PHP] 论实时通信

0
回复
[复制链接]
avatar
  • TA的每日心情
    qdsmile
    2024-10-6 09:47
  • 签到天数: 195 天

    [LV.7]超级吧粉

    7

    主题

    1

    帖子

    672

    积分

    发表于 2019-4-2 14:20:58 | 显示全部楼层 |阅读模式
    实现实时通信一般的两种方式:
    socket或comet。socket是比较好的解决方案,问题在于不是所有的浏览器都兼容,服务器端实现起来也稍微有点麻烦。相比之下,comet(基于HTTP长连接的"服务器推")实现起来更加方便,而且兼容所有的浏览器。所以这次就来说说comet的php实现。
    comet也有好几种实现方式,如iframe, http long request,本文主要探讨http long request实现实时通信。
    先说说http长链接是怎么回事,通俗点讲就是服务器不是一收到请求就直接吐数据,而是在那憋啊憋,一直憋到憋不住了,才告诉你执行结果。
    至于憋多长时间,就看具体应用了,如果憋太久的话,服务器资源的占用也会是个问题。
    现在我们就要通过这种方法来实现实时通信(其实是准实时),先说一下原理:
    1. 客户端发起一个ajax长链接查询,然后服务端就开始执行代码,主要是检查某个文件是否被更新,如果没有,睡一会(sleep),醒来接着检查
    2. 如果客户端又发起了一个查询链接(正常请求),服务端收到后,处理请求,处理完毕后更新某个特定文件的modify time
    3. 这时第一次ajax查询的后台代码还在执行,发现某个文件被更新,说明来了新请求,输出对应的结果
    4. 第一次ajax查询的callback被触发,更新页面,然后再发起一个新的ajax长链接
    您需要登录后才可以回帖 登录 | 立即注册 QQ登录

    本版积分规则