【问题标题】:EventSource disconnects after first messageEventSource 在第一条消息后断开连接
【发布时间】: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/

这发生在任何浏览器上。

【问题讨论】:

    标签: php http server-sent-events


    【解决方案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 上测试过。
    猜你喜欢
    • 1970-01-01
    • 2022-09-28
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2016-11-05
    • 2022-10-01
    • 2021-05-31
    相关资源
    最近更新 更多