gpt4 book ai didi

server - SSE 服务器发送事件 - 客户端不断发送请求(如池化)

转载 作者:行者123 更新时间:2023-12-04 03:31:51 25 4
gpt4 key购买 nike

为什么每个站点都解释说,在 SSE 中,客户端和服务器之间的单个连接保持打开状态“使用 SSE,客户端发送标准 HTTP 请求以请求事件流,服务器最初以标准 HTTP 响应进行响应并保持连接打开”

然后,当服务器决定它可以将数据发送到客户端而我正在尝试实现 SSE 时,我看到每隔几秒钟发送一次 fiddler 请求

对我来说,感觉就像是长时间轮询,而不是一个连接保持打开状态。

此外,不是服务器决定向客户端发送数据并发送它,而是仅在客户端发送下一个请求时才发送数据

如果我回复“重试:10000”,即使发生了服务器想要立即通知的棘手事情,只会在下一个请求(从现在起 10 秒后)到达客户端,这对我来说看起来并不像连接保持打开状态,服务器会根据需要立即发送数据

fiddler sse

最佳答案

您的服务器正在立即关闭连接。 SSE 内置了连接丢失时的重试功能,因此您看到的是:

  • 客户端连接到服务器
  • 服务器神秘死机
  • 客户端等待两秒钟然后自动重新连接
  • 服务器神秘死机
  • 客户端等待两秒钟然后自动重新连接
  • ...

  • 为了修复服务器端脚本,你想违背 parent 教给你的关于对与错的一切,故意制造一个无限循环。所以,它最终会看起来像这样:
    validate user, set up database connection, etc.
    while(true){
    get next bit of data
    send it to client
    flush
    sleep 2 seconds
    }

    哪里 get next bit of data可能正在轮询数据库表以获取自上次轮询以来的新记录,或者扫描文件系统目录以获取新文件等。

    或者,如果服务器端进程是长时间运行的数据分析,则您的脚本可能如下所示:
    validate user, set-up, etc.
    while(true){
    calculate next 1000 digits of pi
    send them to client
    flush
    }

    这假设计算行至少需要半秒才能运行;更频繁地,您将开始用大量小数据包堵塞套接字而没有任何好处(用户不会注意到他们每秒获得 10 个更新而不是 2 个更新/秒)。

    关于server - SSE 服务器发送事件 - 客户端不断发送请求(如池化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415012/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com