如何在本地主机上 运行 flask socket.io (xampp)
How to run flask socket.io on localhost (xampp)
我看过的教程使用下面的代码来运行服务器:
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
看来您正在尝试使用 Miguel 的 Flask-socketIO 扩展,对吧?它只支持 Guinicorn 作为 WSGI 服务器,建议你使用 NGINX 作为代理通道。我对 xampp 一无所知,但据我所知;自最新版本的 Apache 之一以来,可以进行代理传递。不过没试过。
这里是 Flask-SocketIO 的作者。
遗憾的是,此扩展无法与标准网络服务器一起使用,您将无法托管使用它超过 apache/mod_wsgi 的应用。您需要使用 gevent 服务器,而不是通用服务器,而是为 Socket.IO.
定制的服务器
这意味着 Apache 出局了(它甚至不支持 WebSocket 流量)。 uWSGI 也已出局(支持 gevent,但无法使用自定义 gevent 服务器)。作为旁注,Python 3 目前也已发布,因为 gevent 仅在 Python 2 上运行(尽管我认为很快就会有好消息,我正在研究一些想法以获得socketio 运行 现在 Python 3)。
documentation 中给出了您的选择。摘要:
socketio.run(app)
,直接运行自定义socketio gevent服务器。
- 带有自定义 socketio worker 的 Gunicorn(文档中显示的命令行)
如果你愿意,你可以把 nginx 作为反向代理放在你的服务器前面。配置也显示在文档中。
祝你好运!
我看过的教程使用下面的代码来运行服务器:
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
看来您正在尝试使用 Miguel 的 Flask-socketIO 扩展,对吧?它只支持 Guinicorn 作为 WSGI 服务器,建议你使用 NGINX 作为代理通道。我对 xampp 一无所知,但据我所知;自最新版本的 Apache 之一以来,可以进行代理传递。不过没试过。
这里是 Flask-SocketIO 的作者。
遗憾的是,此扩展无法与标准网络服务器一起使用,您将无法托管使用它超过 apache/mod_wsgi 的应用。您需要使用 gevent 服务器,而不是通用服务器,而是为 Socket.IO.
定制的服务器这意味着 Apache 出局了(它甚至不支持 WebSocket 流量)。 uWSGI 也已出局(支持 gevent,但无法使用自定义 gevent 服务器)。作为旁注,Python 3 目前也已发布,因为 gevent 仅在 Python 2 上运行(尽管我认为很快就会有好消息,我正在研究一些想法以获得socketio 运行 现在 Python 3)。
documentation 中给出了您的选择。摘要:
socketio.run(app)
,直接运行自定义socketio gevent服务器。- 带有自定义 socketio worker 的 Gunicorn(文档中显示的命令行)
如果你愿意,你可以把 nginx 作为反向代理放在你的服务器前面。配置也显示在文档中。
祝你好运!