使用 Flask 向所有在线用户推送消息,无需为每个用户创建线程
Push message to all online users using Flask, WITHOUT creating threads for each users
假设有一个聊天组。
有没有办法使用 FLASK 将特定组的任何成员发送的新消息附加到该组中所有在线用户的 html 页面。
WITHOUT:为每个用户创建一个线程并监控聊天中的最新更新。
这是一个示例,代码非常少。如果您有兴趣,那么您可以探索更多并进行实验。
首先,你需要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
消息已被记录。现在,在一个选项卡中输入一些消息并点击发送按钮,您会看到,该消息已在另一个选项卡的控制台中收到。
希望您对此有所了解,对您有所帮助。
注意: 再次声明,这是一个非常基本的示例。当然,你可以添加更多的逻辑和功能,让它更像一个聊天应用程序,但这不在这个问题的讨论范围之内。所以,我将把它留给你和你的想象力,你可以在多大程度上学习并继续前进。您可以阅读该模块的文档 here.
假设有一个聊天组。 有没有办法使用 FLASK 将特定组的任何成员发送的新消息附加到该组中所有在线用户的 html 页面。
WITHOUT:为每个用户创建一个线程并监控聊天中的最新更新。
这是一个示例,代码非常少。如果您有兴趣,那么您可以探索更多并进行实验。
首先,你需要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
消息已被记录。现在,在一个选项卡中输入一些消息并点击发送按钮,您会看到,该消息已在另一个选项卡的控制台中收到。
希望您对此有所了解,对您有所帮助。
注意: 再次声明,这是一个非常基本的示例。当然,你可以添加更多的逻辑和功能,让它更像一个聊天应用程序,但这不在这个问题的讨论范围之内。所以,我将把它留给你和你的想象力,你可以在多大程度上学习并继续前进。您可以阅读该模块的文档 here.