我已经设置了一个服务器发送的事件脚本与
PHP和一个while循环,我不希望脚本不得不保持关闭,必须repoll,所以我把它全部在一个循环.
问题是脚本被卡住了,我不得不放弃该路由,而是使用一个node.js websocket后端.
我的问题是,如果我曾经回到制作服务器发送的事件PHP脚本,我该如何实现?
而循环似乎并没有因为它挂起脚本而被削减,而且如果它每秒连接和断开连接,它与长轮询没有什么不同,所以如何创建一个不会挂起的PHP脚本,同时也发送上交所信息?
你似乎在PHP输出缓冲上有问题.尝试将这些行添加到while循环的末尾:
原文链接:https://www.f2er.com/php/132097.htmlob_flush(); flush();
这应该禁用输出缓冲.
编辑您还可以在一段时间(即10分钟)后终止脚本,以减少服务器负载.
我创建了一个图书馆,让你很容易做到这一点.检查它here.
第二编辑
你有反向代理,如Nginx还是清漆?这可能是因为代理尝试缓存输出的内容,但SSE脚本永远不会停止,直到你停止它,所以整个事情挂起来.捕获输出的其他内容可能具有类似的结果,如mod_deflate.
第三次编辑
如果您有反向代理,您可以尝试关闭缓存以允许SSE工作.
<?PHP for($i=0;$i<ob_get_level();$i++){ ob_end_flush(); } @apache_setenv('no-gzip',1); @ini_set('implict_flush',1); ob_implict_flush(true);