flask_socketio 使用范例


最近看flask有關的文檔。想security, sqlalchemy, jwt等等相關的插件都沒有問題。唯獨這個socketio, 跟着官方文檔一起蒙, 如果不看github上面的范例還真不好懂。

https://flask-socketio.readthedocs.io/en/latest

從文檔的initialization到recieving message等,你在本地就是不能測。

所以只能配合他人的博客來理解了。

1.初始化應用##

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)

在這個基礎上我們添加一個Index.html

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

然后建立相應的templates/index.html
並填入

<script type="text/javascript" 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!'});
    });
</script>

這個script創建了一個socket對象,鏈接到本地。並且創建了一個叫‘connect'的event。
注意,sockeio里面的'connect', 'disconnect', 'message' 以及 'json'是保留的event, 其他的就屬於自定義的
還有一個重要的參數就是namespace, 但是我們在建立鏈接的時候,最后沒有添加namespace,所以就是默認的全局namespace

既然客戶端建立了一個叫connect的event, 將會在建立鏈接的時候調用,然后emit了一個叫'my event'的event, 那么這個自定義的event將會觸發,所以我們在服務端寫:

@socketio.on('my event')
def my_event(message):
    print(message['data'])

這里我們將’my event'收到的message的data字段打印出來,因為上面我們收到的是{data: 'I'm connected!'}這個json格式的數據。

然后啟動程序,打開頁面,你就可以在終端看到 I'm connected! 這個輸出了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM