最近看flask有關的文檔。想security, sqlalchemy, jwt等等相關的插件都沒有問題。惟獨這個socketio, 跟着官方文檔一塊兒蒙, 若是不看github上面的範例還真很差懂。javascript
https://flask-socketio.readthedocs.io/en/latesthtml
從文檔的initialization到recieving message等,你在本地就是不能測。java
因此只能配合他人的博客來理解了。python
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