WebSockets 能够在客户端和服务器之间建立实时的双向通信。与传统的遵循请求-响应周期的 HTTP 请求不同,WebSockets 维护一个持久化的连接,允许数据即时交换。
这对于以下类型的应用程序特别有用:
- 实时聊天。
- 通知推送。
- 股票价格更新。
- 协同编辑工具。
Flask 作为一个轻量级框架,默认情况下不提供 WebSocket 支持,但借助 Flask-SocketIO 模块,我们可以轻松地将 WebSockets 集成到 Flask 应用中。
设置 Flask WebSocket 应用
初始化 Flask 应用 并使用以下命令安装所需的包:
> pip install flask flask-socketio
Flask-SocketIO 构建于 Flask 之上,为管理 WebSocket 连接提供了一个简单的接口。一个典型的 Flask WebSocket 应用包含以下步骤:
- 初始化 Flask 应用。
- 使用 SocketIO 封装 Flask 应用。
- 使用诸如 @socketio.on() 之类的装饰器定义事件处理程序。
- 使用 socketio.run(app) 运行应用。
核心组件:
- SocketIO(app):这封装了 Flask 应用程序以启用 WebSocket 功能。
- 事件处理程序:使用 @socketio.on(‘‘) 装饰的函数用于响应特定的 WebSocket 事件。
- send():发送一个简单的消息。
- emit():向特定的事件通道发送消息,其中可以包含更复杂的数据。
使用 Flask-SocketIO 构建实时消息应用
为了理解如何在 Flask 应用中实现 Flask-SocketIO,让我们构建一个实时消息广播应用。该应用将建立 WebSocket 连接,以实现多个用户之间的无缝通信。每当用户发送消息时,该消息将实时广播给所有连接的客户端。
我们将使用 Flask-SocketIO 来处理 WebSocket 事件,允许客户端即时发送和接收消息。此示例将演示如何:
- 在 Flask 中设置 WebSocket 连接。
- 实时发送和接收消息。
- 向所有连接的用户广播消息。
app.py 代码:
Python
CODEBLOCK_0361d234
解释:
- @socketio.on(‘connect‘) 事件在用户连接时触发,使用 send() 发送欢迎消息。
- @socketio.on(‘message‘) 事件处理传入的消息,并使用 send(message, broadcast=True) 将其广播给所有连接的客户端。
- @socketio.on(‘disconnect‘) 事件记录用户离开聊天的时间。
- socket.on("message", callback) 监听消息并动态更新聊天窗口。
- 消息通过 socket.send(message) 发送,这会触发服务器上的 message 事件。
index.html 代码:
请确保我们在项目文件夹中创建了 templates 文件夹,并在该文件夹内创建一个 index.html 文件。它将作为前端,设置客户端连接并允许消息交换:
HTML
INLINECODEee973828`INLINECODEa678c54c
${data}
`;
});
// 发送消息的函数
function sendMessage() {
var msgInput = document.getElementById("msg");
var message = msgInput.value;
socket.send(me