📅  最后修改于: 2023-12-03 15:30:47.056000             🧑  作者: Mango
Flask SocketIO 是一个基于 Flask 的 SocketIO 库,可用于创建实时的网络应用程序。本文将介绍如何使用 Flask SocketIO 进行消息发送。
在开始之前,需要安装以下几个 Python 包:
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,可以轻松地创建实时的网络应用程序。