V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LuckyHJH
V2EX  ›  PHP

如何做到类似微信网页版的“长请求”

  •  
  •   LuckyHJH · 2015-07-15 20:41:51 +08:00 · 5195 次点击
    这是一个创建于 3422 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图

    其实就是AJAX+轮询,但它每个HTTP请求持续半分钟,大大减少请求次数。但是一有新消息的时候,它又能立刻响应。请问是如何做到的呢?能否用PHP达到这种效果?

    13 条回复    2015-09-06 12:09:23 +08:00
    oott123
        1
    oott123  
       2015-07-15 20:45:57 +08:00   ❤️ 1
    long poll
    picasso250
        2
    picasso250  
       2015-07-15 21:37:08 +08:00
    楼上正解。

    for (;;) { sleep(1); }
    djyde
        3
    djyde  
       2015-07-15 21:39:09 +08:00
    我还以为是 socket 的
    mgcnrx11
        4
    mgcnrx11  
       2015-07-15 21:55:02 +08:00
    LuckyHJH
        5
    LuckyHJH  
    OP
       2015-07-15 21:59:59 +08:00
    这种的话其实不算“推”技术吧,虽然客户端减少请求次数,但是服务器依然不断循环查询数据。
    alexapollo
        6
    alexapollo  
       2015-07-15 22:53:44 +08:00
    long polling,很老的技术了
    whahuzhihao
        7
    whahuzhihao  
       2015-07-15 23:06:02 +08:00
    之前写过一个页聊用的就是long polling。客户端发来的ajax带一个超时时间的参数,然后服务器在这个时间范围内死循环+sleep,一旦有新消息或者超过给定时间,则返回给客户端,客户端再另外发起一个请求。
    或者用websocket吧,更稳定直观一些
    zado
        8
    zado  
       2015-07-15 23:28:25 +08:00
    服务器不去响应浏览器的请求,但是也不断开连接,直到有需要的时候才返回数据给浏览器。php的话应该有一个执行超时时间,过了这个时间应该会断开连接,即使服务器一直不断开,浏览器时间长了也会主动断开了,IE好像是60分钟。
    gqlxj1987
        9
    gqlxj1987  
       2015-07-15 23:46:01 +08:00
    我们这边用的是一个icomet的服务来实现这种长连接
    blue7wings
        10
    blue7wings  
       2015-07-16 08:56:39 +08:00
    使用WebSocket吧,https://pusher.com/
    linpf
        11
    linpf  
       2015-07-16 10:30:50 +08:00
    长轮询。搜索“php comet”
    w99wen
        12
    w99wen  
       2015-07-16 18:02:36 +08:00
    用的websocket。
    shoaly
        13
    shoaly  
       2015-09-06 12:09:23 +08:00 via Android
    搜野狗,目前我看到的一个 10 分钟可以真正用起来的方案
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5323 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 03:49 · PVG 11:49 · LAX 19:49 · JFK 22:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.