所以我看到一些关于SSE的问题,人们问为什么当他们的客户端断开连接时,他们的while循环仍然运行。我现在遇到了相反的问题,我的while循环在客户端断开连接时停止运行。
我正在使用脚本中的套接字与第三方设备通信,此问题阻止我在客户端断开连接时“清理”脚本的操作(即,在关闭套接字之前向第三方设备发送正确的字符串以说“再见”)。
Mozilla(以及许多其他SSE指南)提到要在while循环中包含以下代码,以检查客户端是否已断开连接,并在退出脚本之前使用该代码执行任何清理工作:
if (connection_aborted()){
// Do cleanup work here
exit();
}
但是,脚本只是在客户端断开连接时终止,甚至没有进入if语句。
我试过ignore_user_abort();设置为TRUE和FALSE,但都没有效果。IF语句之前还有一个flush()命令,因为我知道connection_aborted()需要将数据发送到客户端以了解连接是否仍然处于活动状态,但脚本立即终止,这也不会对问题产生任何影响。
我尝试过register_shutdown_function()并将清理代码放入函数中,但这也不起作用。
PHP版本是7.0.9运行在Windows Server 2016 IIS 10上。它会是Windows/IIS的东西吗?
1条答案
按热度按时间jgwigjjp1#
所以我偶然发现了一个2011年的php bug报告,强调了IIS上的这个确切问题,看起来这是IIS的问题,而且是设计出来的。
PHP错误报告
我已经把平台切换到Windows上的Apache,这个问题不再出现了。我已经发布了上面的内容,以防其他人有类似的问题。