Flask使用Flask-SocketIO将信息时时推送前台

flask-socketio模块实际上是封装了flask对websocket的支持,websocket在连接建立阶段是通过HTTP的握手方式进行的,这可以看做是为了兼容浏览器或者使用一些现成的功能来实现,这样一种捷径。当连接建立之后,客户端和服务端之间就不再进行HTTP通信了,所有信息交互都由websocket接管。Flask-SocketIO使Flask应用程序可以访问客户端和服务器之间的低延迟双向通信,使客户端建立与服务器的永久连接。

flask-socketio适用于后台产生新的数据,需要在前台页面马上展示出来,例如数据监控、统计图实时变化更新等。

首先我们安装模块

pip install flask-socketio

SocketIO发送消息

SocketIO可以使用send()和emit()函数向连接的客户端发送消息,两个函数有些区别,send()用于发送未命名事件消息,而emit()用于发送已命名事件消息。

一个简单使用SocketIO的完整实例

#!/usr/bin/python3
#coding:utf-8
from flask import Flask, render_template
from flask_socketio import SocketIO
import random
import json
async_mode = None
app = Flask(__name__)
app.config['SECRET_KEY'] = 'merci'
socketio = SocketIO(app, async_mode=async_mode)
 
@app.route('/')
def index():
    return render_template('test.html')
 
@socketio.on('connect', namespace='/test_conn')
def test_connect():
    while True:
        socketio.sleep(5)
        t = random.randint(10000, 99999)
        data = json.dumps({'data': t})
        socketio.emit(event='server_response', data=data)
 
if __name__ == '__main__':
    socketio.run(app, debug=True)

页面模版:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
    <script type="text/javascript" src="//cdn.bootcss.com/socket.io/1.5.1/socket.io.min.js"></script>
</head>
<body>
<h2 id="t"></h2>
<script type="text/javascript">
$(document).ready(function() {
    namespace = '/test_conn';
    var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);
    socket.on('server_response', function(res) {
        var t = res.data;
        $("#t").text(t);
    }); 
});
</script>
</body>
</html>


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://sulao.cn/post/618.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。