为什么每个站点都解释说在SSE中单个连接在客户端和服务器之间保持打开“使用SSE,客户端发送标准HTTP请求,要求提供事件流,服务器最初使用标准HTTP响应进行响应并保留连接打开“
然后,当服务器决定它可以向我的客户端发送数据而我试图实现SSE时,我会看到每隔几秒发送一次fiddler请求
对我来说,感觉就像长时间的轮询而不是一个单一的连接保持打开。
此外,服务器决定不向客户端发送数据并发送数据,但仅在客户端发送下一个请求时才发送数据
如果我回复“重试:10000”即使发生了严重的事情,服务器现在想要通知,只会在下一个请求(从现在起10秒内)到达客户端,这对我来说并不是真的看起来就像保持打开的连接一样,服务器只要他想
就发送数据
答案 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次更新)。