当前位置: 首页 > 知识库问答 >
问题:

SSE服务器发送的事件-客户机继续发送请求(像池)

赖绪
2023-03-14

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

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

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

共有1个答案

周和歌
2023-03-14

您的服务器正在立即关闭连接。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
  }

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

 类似资料:
  • 为什么每个站点都解释说在SSE中,客户端和服务器之间的单个连接保持打开状态“使用SSE,客户端发送标准HTTP请求请求事件流,服务器最初以标准HTTP响应响应并保持连接打开” 然后,当服务器决定可以向客户端发送数据,而我试图实现SSE时,每隔几秒钟就会看到fiddler请求被发送 对我来说,这感觉就像是长时间的投票,没有一个连接保持打开。 此外,并不是服务器决定向客户机发送数据,而是只有在客户机发

  • 我有一个使用SSE向附加客户端发送更新的node.js服务器。偶尔,我会收到服务器错误H27。与此同时,其他客户端请求可能会在客户端重新注册到SSE事件服务时丢失。 客户端获取/事件请求与服务器H27错误之间的时间介于13秒到19:35分钟之间(在遇到的30次不同事件中)。但GET/事件请求的定时与相应的H27错误之间存在完全的相关性。我每50秒从服务器发送一条keep-alive消息,以绕过He

  • 我有一个NodeJS应用程序,它使用服务器发送事件(SSE)路由将更新从服务器发送到客户端。在我的本地开发环境中,这非常有效,因为客户端始终保持与SSE路由的连接,并且在断开连接时尝试立即重新连接。 然而,一旦我将我的应用程序部署到Heroku,一切都出了问题。在没有通过SSE路由发送任何数据的几秒钟内,我在客户端收到一个503服务不可用的错误,客户端失去了与服务器的连接,因此无法接收任何实时更新

  • 客户端通过HTTP请求(通过浏览器post)调用Servlet,然后Servlet应向外部网站发送请求(get),并从网站接收响应(post)。servlet继续响应并向客户端发送响应(post)。 我的问题是如何在Servlet中发送和接收请求/响应并将某些内容发送回客户端?

  • 您好,我正在React中开发一个web应用程序,它使用Nginx从Express服务器接收SSE数据。 JS服务器 索引:JS const events=新事件源('https://api.myDomain.com/events', ); axios。post(<代码>https://api.myDomain.com/addCart,{客户端:this.state.clientId,购物车:car

  • 我正在开发一个连接到服务器的web应用程序,我需要服务器在给定的时间向客户机推送一些信息。 有人会强调这些技术吗(也许还有其他一些推动技术。)这符合我的问题,哪一种情况更适合每一种情况? 非常感谢,我想我在这个领域完全迷失了。