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 中没有exitdie 或对此类的任何调用,即使while 仍然正确。是的,这很奇怪和错误等等,但我花了 8 个小时试图弄清楚 WTF 导致我的客户端在服务器的每条第一条消息后重新连接......更改为 while(1)... 工作完美。希望这对某人有所帮助。 .. 不,我没有“错过”任何导致循环结束的东西;虽然只在 PHP7.3 上测试过。

以上是关于EventSource 在第一条消息后断开连接的主要内容,如果未能解决你的问题,请参考以下文章

XMPP 与 Firebase 云消息传递的连接断开

断开/重新连接后自定义接收器不调用 onLoad

Xcode显示断开连接消息后应用程序图标未显示

客户端断开连接时套接字服务器崩溃

用户的套接字与服务器断开连接后如何发送消息

pygame:检测操纵杆断开连接,并等待它重新连接