Я пытаюсь flask с графеном (localhost: 80) и сервером веб-сокетов параллельно, чтобы он мог обслуживать подписки graphql на ws: // localhost: 5000.
Однако, как только когда он достигнет server.serve_forever()
, конечная точка http фляги / graphql перестанет отвечать, и будут работать только веб-сокеты.
manage.py:
from gevent import monkey; monkey.patch_all()
from eur import models
from eur.app import create_app
from eur.graphql.graphql_queries import schema
from flask_sockets import Sockets
from graphql_ws.gevent import GeventSubscriptionServer
app = create_app()
app.app_context().push()
sockets = Sockets(app)
subscription_server = GeventSubscriptionServer(schema)
app.app_protocol = lambda environ_path_info: 'graphql-ws'
@sockets.route('/subscriptions')
def echo_socket(ws):
subscription_server.handle(ws)
return []
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(eventlet.listen(('', 5000)), app, handler_class=WebSocketHandler)
server.serve_forever()
app.py:
def create_app(name=None, config_base="eur.config.BaseConfig"):
app = Flask("eur", template_folder=constants.WEB_TEMPLATES_DIR, instance_relative_config=True)
app.add_url_rule('/graphql',view_func=csrf.exempt(GraphQLView.as_view('graphql', schema=schema, graphiql=True))
return app