Flask socket IO 是Flask应用程序能够访问客户端和服务器之间的低延迟双向通信。Socket IO可以保持backend和frontend之间实时双向通讯。Socket IO 主要使用了WebSocket协议。只要是支持socket.io 的语言都可以使用。scoket.io GitHub socket io的GitHub源码所在。
安装和依赖
直接使用pip3
安装就行:
1 | pip3 install flask-socketio |
依赖
Flask socketio 这个扩展完全兼容了python2.7和python3.3+版本。对于flask Socket io的异步服务的推荐选择:
eventlet 推荐使用,这个效率比较高,支持长轮询和 WebSocket 传输。也可以直接用pip3
来安装
1 | pip3 install eventlet |
初始化
在Flask的程序中使用flask socket io:
1 | from flask import Flask, render_template |
app.config['SECRET_KEY']
必须要配置,是为了保证加密传输的安全性。socketio.run
封装并替换了app.run
的启动方式。在此环境下优先使用eventlet
以及在HTML里面怎么使用socket io:
1 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> |
这里的document.domain
和location.port
是web相对的IP和端口。可以自动适配,也可以手动修改成所需要的IP和端口。
接受和发送消息
接受消息在flask里面可以这样使用,这是msg
可以是不同的数据类型,可以是json,str,也可以是多个参数的组合:
1 |
|
发送消息:
1 |
|
也可以只用send
的方式发送。具体的可以查一下,一般只用定向发送。
在HTML里面接受数据的使用方法和在flask里面类似:
1 | socket.on('receive', function( msg ) { |
这样就可以接收到从后端传输的数据。
发送消息:
1 | socket.emit('receive', { |
这样后端就能接收到来自前端的消息。
之前写了一个用socket io实现的live chat给大家分享一下:
重点提示一下,socketio
存在跨域问题,试过网上的好几种方法都不可以。找到了唯一能用的方法:
1 | socketio = SocketIO(app, cors_allowed_origins='*') |
最后:这两天事情有点多,等有时间重新详细写一下。。。