现在的AJAX和其它的富客户端,都逐渐流行一种技术,就是HTTP的长连接
在PHP下的实现方法主要就是在一个循环中不断的检测一些信息,如果有可用信息立即退出循环,输出数据
如果没有的话,sleep一小段时间,再继续检测。现在有些疑问,例如,我通过AJAX向PHP发送一个请求,PHP在执行长连接的检测状态中,如果不小心一直检测不到可用数据而进入了死循环,当我强行关闭页面后,PHP会不会自己强行结束这个死循环的线程?

解决方案 »

  1.   

    一般是客户端用js的settimeout的命令 执行ajax向服务器发送请求。当客户端关闭浏览器后js的进程就结束了,不会再向服务器发送请求了,也就不存在关闭浏览器后还让服务器运行个死循环的情况。除非服务器的php代码就是个死循环。
      

  2.   

    WEB下的即时聊天,就可以采用HTTP长连接方式,AJAX发送一个请求后会一直等待后台的数据返回。这样一旦有消息,立刻返回客户端,响应很及时。
    这种方式不同于你所说的AJAX不断轮循的方式。虽然都可以实现即时聊天,但是方法不一样,你所说的方法当然不会产生这种现象。在客户端settimeout的方法和长连接的方法,相当于是一个在客户端执行循环,另一个是在服务端执行循环,而长连接就是后者。所以我现在关心的就是后端陷入死循环的解决办法
      

  3.   

    服务器那边不会死循环的,你对tcp还不了解,所有的tcp连接都有timeout时间的,一般sleep都要在这个timeout之内,如果超过timeout,sleep是没作用的,tcp超过timeout后就会关闭这个连接,服务器一般不会把这个timeout值设得太大,否则服务器很容易就iptable溢出宕机我这边说的比较简单,深入点你可以去GG "tcp握手协议"
      

  4.   

    首先,PHP 引擎都有脚本执行时间限制(除非你通过配置参数或函数调用明确解除这个限制),所以一般不会永远死循环。当你关闭页面的时候,网络连接也就断了,但此时 PHP 程序并不一定能立刻感知到,一般是当它需要输出的时候,才会发现网络连接已经断了,而 PHP 程序是否立刻停止,也是有配置参数来控制的。说到“长连接”类的应用,你可以搜一下 "comet",其实我觉得 PHP 并不适合用来实现 comet server,开销太大。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  5.   

    你说的情况,是指服务端webserver对于已经丢失的tcp连接怎么处理首先有webserver和客户端能正常连接,cgi程序(例如php)才会在这个连接的基础上作响应连接丢失(主动关闭/超时等),webserver肯定会杀死这个进程的楼上解释的很对,你可以去了解下tcp协议
      

  6.   

    楼主问的是不是:Comet:基于 HTTP 长连接的“服务器推”技术??
      

  7.   


      看过一个聊天室代码,用的就是PHP后台代码,结合缓冲函数和SLEEP函数,实现即时通信。不需要AJAX前端长轮循的方式,楼主说的应该就是这种的吧!