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

2015-07-15 20:41:51 +08:00
 LuckyHJH

如图

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

5189 次点击
所在节点    PHP
13 条回复
oott123
2015-07-15 20:45:57 +08:00
long poll
picasso250
2015-07-15 21:37:08 +08:00
楼上正解。

for (;;) { sleep(1); }
djyde
2015-07-15 21:39:09 +08:00
我还以为是 socket 的
mgcnrx11
2015-07-15 21:55:02 +08:00
LuckyHJH
2015-07-15 21:59:59 +08:00
这种的话其实不算“推”技术吧,虽然客户端减少请求次数,但是服务器依然不断循环查询数据。
alexapollo
2015-07-15 22:53:44 +08:00
long polling,很老的技术了
whahuzhihao
2015-07-15 23:06:02 +08:00
之前写过一个页聊用的就是long polling。客户端发来的ajax带一个超时时间的参数,然后服务器在这个时间范围内死循环+sleep,一旦有新消息或者超过给定时间,则返回给客户端,客户端再另外发起一个请求。
或者用websocket吧,更稳定直观一些
zado
2015-07-15 23:28:25 +08:00
服务器不去响应浏览器的请求,但是也不断开连接,直到有需要的时候才返回数据给浏览器。php的话应该有一个执行超时时间,过了这个时间应该会断开连接,即使服务器一直不断开,浏览器时间长了也会主动断开了,IE好像是60分钟。
gqlxj1987
2015-07-15 23:46:01 +08:00
我们这边用的是一个icomet的服务来实现这种长连接
blue7wings
2015-07-16 08:56:39 +08:00
使用WebSocket吧,https://pusher.com/
linpf
2015-07-16 10:30:50 +08:00
长轮询。搜索“php comet”
w99wen
2015-07-16 18:02:36 +08:00
用的websocket。
shoaly
2015-09-06 12:09:23 +08:00
搜野狗,目前我看到的一个 10 分钟可以真正用起来的方案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/205937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX