假设有一个聊天群.有没有一种方法可以将某一特定群组的任何成员发送的新消息用FLASK附加到该群组中所有在线用户的html页面上。
不需要:为每个用户创建一个线程,并监控聊天中的最新更新。
这是一个例子,使用了非常少的代码。如果你有兴趣,那么你可以探索更多,并做实验。
首先,你需要Flask-SocketIO模块,运行下面的命令来安装它。
pip install flask-socketio
在这个例子中,项目目录会像下面一样。
ProjectDirectory
|
|-> templates
| |
| |-> index.html
|
|-> app.py
app.py
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'randomSecretKEy@123'
socket = SocketIO(app)
@app.route('/')
def index():
return render_template('index.html')
@socket.on('message')
def message(data):
print(data)
emit('receive_message', data, broadcast=True)
if __name__ == '__main__':
socket.run(app)
index.html
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
<script src="//code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
var socket = io();
socket.on('connect', function() {
console.log('Connected to server');
});
socket.on('receive_message', function(msg) {
console.log('Received message: ', msg)
})
function sendMessage() {
msg = $('#message').val()
socket.emit('message', msg)
}
</script>
<input type="text" id="message"><button onclick="sendMessage()">Send</button>
运行Flask应用,打开两个浏览器标签页,web开发者工具并排打开。一打开,就会看到 Connected to server
消息已被记录。现在,键入一些消息,然后点击发送按钮,在一个选项卡中,你会看到,消息已经在另一个选项卡的控制台中收到。
我希望你得到一个方向,这对你有帮助。
注意事项 再一次,我告诉大家这是一个非常基本的例子。当然,你可以添加更多的逻辑和功能,让它更像一个聊天应用,但这将超出这个问题的范围。所以,我将留给你和你的想象力,你可以学习到什么程度,并把这个提前。你可以阅读关于该模块的文档 此处.