flask_socketio message_queue redis 示例代码
时间: 2024-10-22 14:18:51 浏览: 37
Flask-SocketIO、message_queue和Redis通常结合在一起构建实时应用,如Web应用程序的消息推送系统。这里是一个简单的示例代码,展示了如何在Flask应用中使用Socket.IO连接客户端,并通过Redis作为消息队列:
首先安装所需的库:
```bash
pip install Flask SocketIO redis
```
然后创建`app.py`文件:
```python
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import redis
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
socketio = SocketIO(app)
# 连接Redis
redis_client = redis.Redis(host='localhost', port=6379, db=0)
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('message')
def handle_message(data):
# 发送到Redis
redis_client.rpush('message_queue', data)
# 同步通知所有连接的客户端
emit('new_message', {'data': data}, broadcast=True)
if __name__ == '__main__':
socketio.run(app)
```
在这个例子中,当用户发送一条`message`到前端页面时,服务端会将其存储到Redis的`message_queue`列表中,并立即广播给所有已连接的客户端。
接下来,假设你有`templates/index.html`,其中包含一个JS部分用于与Socket.IO交互:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Real-time Chat</title>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
function sendMessage() {
const input = document.getElementById('message-input');
socket.emit('message', input.value);
input.value = '';
}
// 接收新消息
socket.on('new_message', (data) => {
console.log('New Message:', data.data);
// 在这里添加显示新消息的逻辑
});
</script>
</head>
<body>
<input type="text" id="message-input" placeholder="Type a message...">
<button onclick="sendMessage()">Send</button>
</body>
</html>
```
在这个HTML中,每当用户输入并点击“Send”按钮,前端将向服务器发送一个消息,并接收新的消息更新。
阅读全文