3

私が見たチュートリアルでは、次のコードを使用してサーバーを実行しています。

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
4

2 に答える 2

1

Flask-SocketIO の作成者はこちら。

残念ながら、この拡張機能は標準の Web サーバーでは動作しません。これを使用するアプリを apache/mod_wsgi でホストすることはできません。一般的なサーバーではなく、Socket.IO 用にカスタマイズされた gevent サーバーを使用する必要があります。

これは、Apache がなくなったことを意味します (WebSocket トラフィックもサポートしていません)。また、uWSGI もリリースされています (gevent をサポートしていますが、カスタム gevent サーバーを使用することはできません)。補足として、gevent は Python 2 でしか動作しないため、Python 3 も現在リリースされています (これについてはすぐに良いニュースがあると思いますが、現在 Python 3 で socketio を実行するためのいくつかのアイデアに取り組んでいます)。 .

選択肢はドキュメントに記載されています。概要:

  • socketio.run(app)カスタム socketio gevent サーバーを直接実行します。
  • カスタム socketio ワーカーを使用した Gunicorn (コマンド ラインはドキュメントに示されています)

必要に応じて、nginx をサーバーの前にリバース プロキシとして配置できます。構成はドキュメントにも示されています。

幸運を!

于 2015-06-14T17:55:21.313 に答える
0

Miguel の Flask-socketIO 拡張機能を使用しようとしているようですね。WSGI サーバーとして Guinicorn のみをサポートし、NGINX をプロキシ パスとして使用することをお勧めします。xamppについては何も知りませんが、読んだ限りでは; Apache の最新バージョンの 1 つ以降では、プロキシ パスを実行できます。でも試していません。

于 2015-06-14T12:00:44.567 に答える