LuckyHJH
V2EX  ›  PHP

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

  •  
  •   LuckyHJH · Jul 15, 2015 · 6042 views
    This topic created in 4001 days ago, the information mentioned may be changed or developed.

    如图

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

    13 replies    2015-09-06 12:09:23 +08:00
    oott123
        1
    oott123  
       Jul 15, 2015   ❤️ 1
    long poll
    picasso250
        2
    picasso250  
       Jul 15, 2015
    楼上正解。

    for (;;) { sleep(1); }
    djyde
        3
    djyde  
       Jul 15, 2015
    我还以为是 socket 的
    mgcnrx11
        4
    mgcnrx11  
       Jul 15, 2015
    LuckyHJH
        5
    LuckyHJH  
    OP
       Jul 15, 2015
    这种的话其实不算“推”技术吧,虽然客户端减少请求次数,但是服务器依然不断循环查询数据。
    alexapollo
        6
    alexapollo  
       Jul 15, 2015
    long polling,很老的技术了
    whahugao
        7
    whahugao  
       Jul 15, 2015
    之前写过一个页聊用的就是long polling。客户端发来的ajax带一个超时时间的参数,然后服务器在这个时间范围内死循环+sleep,一旦有新消息或者超过给定时间,则返回给客户端,客户端再另外发起一个请求。
    或者用websocket吧,更稳定直观一些
    zado
        8
    zado  
       Jul 15, 2015
    服务器不去响应浏览器的请求,但是也不断开连接,直到有需要的时候才返回数据给浏览器。php的话应该有一个执行超时时间,过了这个时间应该会断开连接,即使服务器一直不断开,浏览器时间长了也会主动断开了,IE好像是60分钟。
    gqlxj1987
        9
    gqlxj1987  
       Jul 15, 2015
    我们这边用的是一个icomet的服务来实现这种长连接
    blue7wings
        10
    blue7wings  
       Jul 16, 2015
    使用WebSocket吧,https://pusher.com/
    linpf
        11
    linpf  
       Jul 16, 2015
    长轮询。搜索“php comet”
    w99wen
        12
    w99wen  
       Jul 16, 2015
    用的websocket。
    shoaly
        13
    shoaly  
       Sep 6, 2015 via Android
    搜野狗,目前我看到的一个 10 分钟可以真正用起来的方案
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   867 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 19:20 · PVG 03:20 · LAX 12:20 · JFK 15:20
    ♥ Do have faith in what you're doing.