Home > Backend Development > PHP Tutorial > 长连接的有关问题【求教】

长连接的有关问题【求教】

WBOY
Release: 2016-06-13 13:24:05
Original
977 people have browsed it

长连接的问题【求教】
我想实现一个长连接,
客户端用js向服务端发出一个请求,php接到请求后,进行一些处理(用curl到别的地方取一些信息),然后推送到客户端,这时候客户端(JS)接到信息进行处理后,用什么方式可以再将信息利用这个长连接发送到服务器端?


我用类似这种方式实现长连接的,是不是这种长连接只能是客户端第一次向服务端发送请求后,后续只能是服务器向客户端推送内容,客户端还能利用这个连接向服务器发送内容么:

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
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();


Copy after login



------解决方案--------------------
所谓“长连接”是等待数据返回时间很长的连接
服务端也没有“推送到客户端”,只是在收到请求后经过一个相当长的时间间隔后才“返回”数据到客户端

在模拟“长连接”的实现中
客户端的 ajax 在收到返回数据后,立即发起新的一轮连接
服务器端的 php 也不是像你那样一直处于死循环中,而是一旦输出完成就跳出循环而结束程序的运行
------解决方案--------------------
传送到客户端程序后再激活一个js函数,通过ajax,把数据再传回php的一个方法里,那时那个连接肯定不在了,不能持续的,放在缓存里应该也不行
------解决方案--------------------
请使用AJAX定时器轮询,这个世界没有HTTP长连接。
------解决方案--------------------
在使用 ajax 时,我们都是用 readyState == 4 来判断数据是否加载完成(status == 200 只是表示没有错误)

按照你的期望,你可以在 readyState == 3 (表示有数据到达)时就开始去数据
只不过这个信号只是在 Firefox 中才是可靠的

Firefox 是在 netscape 公司倒闭时公布的 netscape 浏览器源码的基础上发展的
而 netscape 浏览器本身就是支持 server push 的,只是当时占主流的 IE 不支持,所以这个技术发展不起来
估计当大多浏览器厂商把 bt、p2p 技术引入浏览器时,服务器推才有可能真正的发展起来
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template