如何在PHP中实现Server Sent Events?

前端之家收集整理的这篇文章主要介绍了如何在PHP中实现Server Sent Events?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经设置了一个服务器发送的事件脚本与 PHP和一个while循环,我不希望脚本不得不保持关闭,必须repoll,所以我把它全部在一个循环. @H_404_1@问题是脚本被卡住了,我不得不放弃该路由,而是使用一个node.js websocket后端.

@H_404_1@我的问题是,如果我曾经回到制作服务器发送的事件PHP脚本,我该如何实现?
而循环似乎并没有因为它挂起脚本而被削减,而且如果它每秒连接和断开连接,它与长轮询没有什么不同,所以如何创建一个不会挂起的PHP脚本,同时也发送上交所信息?

你似乎在PHP输出缓冲上有问题.尝试将这些行添加到while循环的末尾:
ob_flush();
flush();
@H_404_1@这应该禁用输出缓冲.

@H_404_1@编辑您还可以在一段时间(即10分钟)后终止脚本,以减少服务器负载.

@H_404_1@我创建了一个图书馆,让你很容易做到这一点.检查它here.

@H_404_1@第二编辑
你有反向代理,如Nginx还是清漆?这可能是因为代理尝试缓存输出内容,但SSE脚本永远不会停止,直到你停止它,所以整个事情挂起来.捕获输出的其他内容可能具有类似的结果,如mod_deflate.

@H_404_1@第三次编辑
如果您有反向代理,您可以尝试关闭缓存以允许SSE工作.

@H_404_1@PHP中还有一种方法来禁用输出缓冲.请参阅以下代码

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

猜你在找的PHP相关文章