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