flask_socketio 使用範例

最近看flask有關的文檔。想security, sqlalchemy, jwt等等相關的插件都沒有問題。惟獨這個socketio, 跟着官方文檔一塊兒蒙, 若是不看github上面的範例還真很差懂。javascript

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

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

因此只能配合他人的博客來理解了。python

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.htmlgit

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

而後創建相應的templates/index.html
並填入github

<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,因此就是默認的全局namespaceajax

既然客戶端創建了一個叫connect的event, 將會在創建連接的時候調用,而後emit了一個叫'my event'的event, 那麼這個自定義的event將會觸發,因此咱們在服務端寫:sql

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

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

而後啓動程序,打開頁面,你就能夠在終端看到 I'm connected! 這個輸出了。flask

相關文章
相關標籤/搜索