EventSource 在第一条消息后断开连接
Posted
技术标签:
【中文标题】EventSource 在第一条消息后断开连接【英文标题】:EventSource disconnects after first message 【发布时间】:2012-11-27 18:32:42 【问题描述】:对EventSource
的行为有点困惑。
它连接良好并保持连接状态,直到收到第一条消息。
当我发送data: something\n\n
消息时,连接被断开并创建了新连接。
使用Content-Type: text/event-stream
标头和连接被识别为事件流并且检查器显示pending
状态。
正如我所说,在我发送第一条消息之前一切正常。
在此之后,连接被中断并创建了新的连接,并且消息没有发送到浏览器(至少页面没有按照应有的方式更新)。
我的服务器和客户端代码和这里完全一样:http://www.html5rocks.com/en/tutorials/eventsource/basics/
这发生在任何浏览器上。
【问题讨论】:
【参考方案1】:确保您的服务器代码未发送 Transfer-Encoding
标头。
或者如果它发送它,请确保它没有设置为分块。
EventSource
在分块的Transfer-Encoding
上表现奇怪
您可以删除Transfer-Encoding
标头或将其设置为identity
。
如果这没有帮助,请确保您的网络服务器没有将该标头设置为分块。
如果是这样并且您无法更新其配置,请确保您的代码将标头设置为 identity
(您的代码设置的标头将覆盖 Web 服务器设置的标头)。
如果您只是删除代码中的标头,浏览器将使用 Web 服务器设置的一组,
所以请务必将其设置为 identity
而不是删除。
【讨论】:
噢!它适用于身份传输编码!为什么这在任何地方都没有记录?谢谢大佬! 好吧,它记录在here :) 当心! - 在 php 中,如果您将 keep-alive 循环定义为do...while(...)
,那么您的连接将继续重新连接;即使您的do
中没有exit
或die
或对此类的任何调用,即使while
仍然正确。是的,这很奇怪和错误等等,但我花了 8 个小时试图弄清楚 WTF 导致我的客户端在服务器的每条第一条消息后重新连接......更改为 while(1)...
工作完美。希望这对某人有所帮助。
.. 不,我没有“错过”任何导致循环结束的东西;虽然只在 PHP7.3 上测试过。以上是关于EventSource 在第一条消息后断开连接的主要内容,如果未能解决你的问题,请参考以下文章