SSE服务器发送事件 - 客户端继续发送请求(如池)

时间:2015-05-23 16:27:34

标签: server comet server-sent-events

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

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

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

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

如果我回复“重试:10000”即使发生了严重的事情,服务器现在想要通知,只会在下一个请求(从现在起10秒内)到达客户端,这对我来说并不是真的看起来就像保持打开的连接一样,服务器只要他想

就发送数据

fiddler sse

1 个答案:

答案 0 :(得分:4)

您的服务器正在立即关闭连接。 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可能在轮询数据库表以查找自上次轮询以来的新记录,或扫描文件系统目录以查找新文件等。

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

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

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