我看过的教程使用以下代码来运行服务器:
if __name__ == '__main__':
socketio.run(app)
我的__init__.py
文件是:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.orm import sessionmaker
from sqlalchemy import *
from flask.ext.socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app)
app.debug = True
engine = create_engine('mysql://root:my_pw@localhost/db_name')
DBSession = sessionmaker(bind=engine)
import couponmonk.views
我的views.py
文件包含所有@app.route
和@socketio
装饰器。
我的问题是,我应该在哪里放置代码:
socketio.run(app)
当我把它放在__init__.py_
文件中时,我会收到错误:
File "/opt/lampp/htdocs/flaskapp/flask.wsgi", line 7, in <module>
from couponmonk import app as application
File "/home/giri/Desktop/couponmonk/venv/couponmonk/__init__.py", line 14, in <module>
socketio.run(app)
File "/home/giri/Desktop/couponmonk/venv/lib/python2.7/site-packages/flask_socketio/__init__.py", line 411, in run
run_with_reloader(run_server)
File "/home/giri/Desktop/couponmonk/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 632, in run_with_reloader
return run_with_reloader(*args, **kwargs)
File "/home/giri/Desktop/couponmonk/venv/lib/python2.7/site-packages/werkzeug/_reloader.py", line 231, in run_with_reloader
sys.exit(reloader.restart_with_reloader())
SystemExit: 2
答案 0 :(得分:1)
Flask-SocketIO的作者。
不幸的是,此扩展程序无法与标准Web服务器一起使用,您将无法通过apache / mod_wsgi托管使用它的应用程序。您需要使用gevent服务器,而不是通用服务器,而是为Socket.IO定制的服务器。
这意味着Apache已经出局(它甚至不支持WebSocket流量)。 uWSGI也是out(支持gevent,但不能使用自定义gevent服务器)。作为旁注,Python 3目前也已经出局了,因为gevent只能在Python 2上运行(尽管我认为很快就会有关于此的好消息,我正在研究一些想法来实现socketio运行现在在Python 3上。)
documentation中提供了您的选择。总结:
socketio.run(app)
,直接运行自定义socketio gevent服务器。如果您愿意,可以将nginx作为反向代理放在服务器前面。配置也显示在文档中。
祝你好运!答案 1 :(得分:0)
你似乎试图使用Miguel的Flask-socketIO扩展,对吧?它只支持Guinicorn作为WSGI服务器,并建议您使用NGINX作为代理传递。我对xampp一无所知,但据我所知;自Apache的最新版本之一以来,可以进行代理传递。没试过。