📜  flask socketio 发送 - Python (1)

📅  最后修改于: 2023-12-03 15:30:47.056000             🧑  作者: Mango

Flask SocketIO 发送 - Python

Flask SocketIO 是一个基于 Flask 的 SocketIO 库,可用于创建实时的网络应用程序。本文将介绍如何使用 Flask SocketIO 进行消息发送。

环境搭建

在开始之前,需要安装以下几个 Python 包:

  • Flask
  • Flask-SocketIO
pip install flask flask-socketio
建立应用

首先,需要在 Flask 应用中初始化 SocketIO:

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

if __name__ == '__main__':
    socketio.run(app)
发送消息

接下来,我们可以通过 SocketIO 发送消息。以下示例演示在客户端连接时,向客户端发送消息:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@socketio.on('connect')
def test_connect():
    emit('my response', {'data': 'Connected'})
    
if __name__ == '__main__':
    socketio.run(app)

在上面的代码中,通过 @socketio.on('connect') 装饰器定义了一个事件,当有客户端连接时,就会触发这个事件,并向客户端发送一个名为 "my response" 的消息,消息的数据为一个包含 "data" 字段的字典。

接收消息

除了发送消息,我们还可以从客户端接收消息。以下示例演示在客户端发送消息时,打印消息内容:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@socketio.on('my event')
def handle_my_custom_event(json):
    print('received json: ' + str(json))
    
if __name__ == '__main__':
    socketio.run(app)

在上面的代码中,通过 @socketio.on('my event') 装饰器定义了一个事件,当客户端发送名为 "my event" 的消息时,就会触发这个事件,并通过 json 参数接收消息的内容。

完整示例

最后,让我们来看一个完整的示例,其中演示了如何在客户端发送消息,并通过 SocketIO 显示到所有客户端:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@app.route('/')
def index():
    return render_template('index.html')

@socketio.on('my event')
def handle_my_custom_event(json):
    print('received json: ' + str(json))
    emit('my response', json, broadcast=True)

if __name__ == '__main__':
    socketio.run(app)

以上代码中,@app.route('/') 装饰器定义了一个 Flask 路由,当客户端访问网站首页时,将返回一个名为 "index.html" 的模板。模板代码如下:

<html>
<head>
    <title>Flask SocketIO Example</title>
</head>
<body>
    <h1>Flask SocketIO Example</h1>
    <input id="input" type="text">
    <button id="send">Send</button>
    <div id="messages"></div>

    <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
    <script type="text/javascript" charset="utf-8">
        var socket = io.connect('http://' + document.domain + ':' + location.port);
        socket.on('connect', function() {
            socket.emit('my event', {data: 'I\'m connected!'});
        });

        $('#send').click(function() {
            socket.emit('my event', {data: $('#input').val()});
        });

        socket.on('my response', function(msg) {
            $('#messages').append('<br>' + msg.data);
        });
    </script>
</body>
</html>

在客户端通过 socket.emit('my event', {data: 'message'}) 发送消息,并通过 socket.on('my response', function(msg) {...}) 接收消息。当有新消息时,会将消息内容添加到 id="messages" 的标签中。

结论

本文介绍了如何使用 Flask SocketIO 进行消息发送。通过 SocketIO,可以轻松地创建实时的网络应用程序。