Flask Restful和Flask SocketIO服务器一起运行

时间:2017-09-09 17:17:20

标签: flask-restful flask-socketio

我试图同时使用Flask Restful和Flask SocketIO。我已经制作了Flask Restful应用程序,但现在我想使用Flask SocketIO在客户端和我的服务器之间进行实时通信。

from flask import Flask
from flask_restful import Api
from flask_socketio import SocketIO

app = Flask(__name__)
api = Api(app)
socketio = SocketIO()

if __name__ == '__main__':
    socketio.run(app, port=5000, host='0.0.0.0')
    app.run(port=5000, host='0.0.0.0')

一旦我运行了这个,我就得到了

Traceback (most recent call last):
  File "app.py", line 10, in <module>
    socketio.run(app, port=5000, host='0.0.0.0')
  File "C:\Python27\lib\site-packages\flask_socketio\__init__.py", line 475, in run
    if self.server.eio.async_mode == 'threading':
AttributeError: 'NoneType' object has no attribute 'eio'

我是使用Flask进行编码的初学者。希望你能帮助我。感谢。

2 个答案:

答案 0 :(得分:3)

Flask-Restful不会改变您启动服务器的方式。你可以这样做:

app = Flask(__name__)
api = Api(app)
socketio = SocketIO(app)

if __name__ == '__main__':
    socketio.run(app, port=5000, host='0.0.0.0')

您在问题中粘贴的代码有一个导致AttributeError的错误,那就是您没有将app实例传递给SocketIO构造函数。

答案 1 :(得分:0)

我认为您应该考虑使用外部提供程序来实现实时功能。查看PushRadar的Python库(https://www.pushradar.com/docs/latest/python)。虽然它是付费服务,但它不需要运行websocket服务器,并提供一些有用的功能,如用户定位。

免责声明:我是PushRadar的创始人