我想实现一个长连接,
客户端用js向服务端发出一个请求,php接到请求后,进行一些处理(用curl到别的地方取一些信息),然后推送到客户端,这时候客户端(JS)接到信息进行处理后,用什么方式可以再将信息利用这个长连接发送到服务器端?
我用类似这种方式实现长连接的,是不是这种长连接只能是客户端第一次向服务端发送请求后,后续只能是服务器向客户端推送内容,客户端还能利用这个连接向服务器发送内容么:header("Content-Type:text/html");
set_time_limit(0);$num = 3;
while($num){
$num--;
print str_repeat(" ", 4096);
echo date("H:i:s")."<br/>";
ob_flush();
flush();
sleep(2);
}ob_end_flush();
客户端用js向服务端发出一个请求,php接到请求后,进行一些处理(用curl到别的地方取一些信息),然后推送到客户端,这时候客户端(JS)接到信息进行处理后,用什么方式可以再将信息利用这个长连接发送到服务器端?
我用类似这种方式实现长连接的,是不是这种长连接只能是客户端第一次向服务端发送请求后,后续只能是服务器向客户端推送内容,客户端还能利用这个连接向服务器发送内容么:header("Content-Type:text/html");
set_time_limit(0);$num = 3;
while($num){
$num--;
print str_repeat(" ", 4096);
echo date("H:i:s")."<br/>";
ob_flush();
flush();
sleep(2);
}ob_end_flush();
服务端也没有“推送到客户端”,只是在收到请求后经过一个相当长的时间间隔后才“返回”数据到客户端在模拟“长连接”的实现中
客户端的 ajax 在收到返回数据后,立即发起新的一轮连接
服务器端的 php 也不是像你那样一直处于死循环中,而是一旦输出完成就跳出循环而结束程序的运行
确实是这样的,我虽然有flush输出缓存,这个连接也有保持,但是前端只有等这个请求结束了才能拿到返回内容,有什么办法在php flush推送到前端后,就让前端捕获?
只不过这个信号只是在 Firefox 中才是可靠的Firefox 是在 netscape 公司倒闭时公布的 netscape 浏览器源码的基础上发展的
而 netscape 浏览器本身就是支持 server push 的,只是当时占主流的 IE 不支持,所以这个技术发展不起来
估计当大多浏览器厂商把 bt、p2p 技术引入浏览器时,服务器推才有可能真正的发展起来