yan*_*vps 5 comet server-sent-events server
为什么每个站点都解释说,在 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
}
Run Code Online (Sandbox Code Playgroud)
可能get next bit of data会轮询数据库表以获取自上次轮询以来的新记录,或者扫描文件系统目录以获取新文件等。
或者,如果服务器端进程是长时间运行的数据分析,您的脚本可能如下所示:
validate user, set-up, etc.
while(true){
calculate next 1000 digits of pi
send them to client
flush
}
Run Code Online (Sandbox Code Playgroud)
这假设计算行至少需要半秒才能运行;如果更频繁,您将开始用大量小数据包堵塞套接字,而没有任何好处(用户不会注意到他们每秒获得 10 次更新,而不是每秒 2 次更新)。
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |