使用Flask向所有在线用户推送消息,而无需为每个用户创建线程。

问题描述 投票:0回答:1

假设有一个聊天群.有没有一种方法可以将某一特定群组的任何成员发送的新消息用FLASK附加到该群组中所有在线用户的html页面上。

不需要:为每个用户创建一个线程,并监控聊天中的最新更新。

python flask chat
1个回答
1
投票

这是一个例子,使用了非常少的代码。如果你有兴趣,那么你可以探索更多,并做实验。

首先,你需要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 消息已被记录。现在,键入一些消息,然后点击发送按钮,在一个选项卡中,你会看到,消息已经在另一个选项卡的控制台中收到。

我希望你得到一个方向,这对你有帮助。


注意事项 再一次,我告诉大家这是一个非常基本的例子。当然,你可以添加更多的逻辑和功能,让它更像一个聊天应用,但这将超出这个问题的范围。所以,我将留给你和你的想象力,你可以学习到什么程度,并把这个提前。你可以阅读关于该模块的文档 此处.

© www.soinside.com 2019 - 2024. All rights reserved.