我正在尝试并行安装石墨烯(localhost:80)和Websocket服务器,以便它可以在ws:// localhost:5000上提供graphql订阅。
但是,只要达到server.serve_forever()
,flask / graphql http端点就会停止响应,只有websocket可以工作。
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