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! 这个输出了。

posted @ 2016-05-24 16:39  文宁  阅读(4025)  评论(0编辑  收藏  举报