EventSourceResponse手动终止
时间: 2024-12-28 21:13:12 浏览: 10
### 如何手动终止 EventSourceResponse 连接
为了能够手动终止 `EventSourceResponse` 的连接,在客户端通常会使用 `EventSource` 对象。通过调用该对象的 `close()` 方法可以关闭事件源连接[^1]。
下面是一个简单的 Python Flask 应用程序端实现服务器发送事件 (SSE),以及前端 JavaScript 中如何创建并最终关闭这个连接的例子:
#### 后端代码(Python Flask)
```python
from flask import Flask, Response, stream_with_context
import time
app = Flask(__name__)
@app.route('/events')
def events():
def event_stream():
while True:
yield f"data: {time.time()}\n\n"
time.sleep(1)
response = Response(stream_with_context(event_stream()), mimetype="text/event-stream")
# 设置响应超时时间或其他必要的头部信息
return response
```
#### 前端代码(JavaScript)
当不再需要接收来自服务器的消息更新时,可以通过如下方式来断开 SSE 连接:
```javascript
let source;
function startConnection() {
if (!source) {
source = new EventSource("/events");
source.onmessage = function(e) {
console.log(`New message: ${e.data}`);
};
source.onerror = function(error){
console.error('Error occurred:', error);
closeConnection();
}
} else {
console.warn("Already connected.");
}
}
function closeConnection(){
if(source && source.readyState === EventSource.OPEN){
source.close(); // 关闭连接
console.info("Connection closed.")
}else{
console.warn("No active connection to close.");
}
}
```
在这个例子中,每当用户想要停止监听消息的时候就可以调用 `closeConnection` 函数从而安全地结束与服务端之间的通信[^2]。
阅读全文