SSE服务器发送的事件-客户端不断发送请求(如轮询) [英] SSE Server Sent Events - Client keep sending requests (like polling)

查看:33
本文介绍了SSE服务器发送的事件-客户端不断发送请求(如轮询)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

对我来说,这感觉像是长时间轮询,没有一个连接保持打开。

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

如果我以"重试:10000"作为响应,即使发生了服务器想要立即通知的棘手情况,也只能在下一个请求(从现在起10秒后)到达客户端,对我来说,这看起来不像是保持打开的连接,服务器会根据需要尽快发送数据

推荐答案

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

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

要修复服务器端脚本,您需要违背父母教给您的关于对与错的所有内容,并且故意创建无限循环。因此,它最终将如下所示:

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可能正在轮询DB表以查找自上次轮询以来的新记录,或扫描文件系统目录以查找新文件,等等。

或者,如果服务器端流程是长期运行的数据分析,则您的脚本可能如下所示:

validate user, set-up, etc.
while(true){
  calculate next 1000 digits of pi
  send them to client
  flush
  }

这假设Calculate行至少需要半秒才能运行;如果运行得再频繁,您将开始使用大量无益的小数据包阻塞套接字(用户不会注意到他们每秒获得10个更新,而不是2个更新)。

这篇关于SSE服务器发送的事件-客户端不断发送请求(如轮询)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆