Skip to content

Commit 2f99fa3

Browse files
committed
add a gevent websocket server
1 parent 3df5301 commit 2f99fa3

3 files changed

Lines changed: 57 additions & 1 deletion

File tree

examples/flask_app.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from flask import Flask, make_response
2+
from flask_sockets import Sockets
3+
from graphql_ws.server import GeventSubscriptionServer
4+
import json
5+
from template import render_graphiql
6+
import graphene
7+
import gevent
8+
from flask_graphql import GraphQLView
9+
import asyncio
10+
from rx import Observable
11+
12+
13+
class Query(graphene.ObjectType):
14+
base = graphene.String()
15+
16+
17+
class Subscription(graphene.ObjectType):
18+
19+
username = graphene.String()
20+
21+
22+
def resolve_username(root, info):
23+
return Observable.interval(1000).map(lambda i: "{0}".format(i))
24+
25+
26+
schema = graphene.Schema(query=Query, subscription=Subscription)
27+
28+
29+
30+
app = Flask(__name__)
31+
app.debug = True
32+
sockets = Sockets(app)
33+
34+
35+
@app.route('/graphiql')
36+
def graphql_view():
37+
return make_response(render_graphiql())
38+
39+
app.add_url_rule(
40+
'/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=False))
41+
42+
subscription_server = GeventSubscriptionServer(schema)
43+
app.app_protocol = lambda environ_path_info: 'graphql-ws'
44+
45+
@sockets.route('/subscriptions')
46+
def echo_socket(ws):
47+
subscription_server.handle(ws)
48+
return []
49+
50+
51+
if __name__ == "__main__":
52+
from gevent import pywsgi
53+
from geventwebsocket.handler import WebSocketHandler
54+
server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
55+
server.serve_forever()

examples/src/graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 6df8a6312b579a6a1454bcf29a566ce5d0fa9849

examples/template.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def render_graphiql():
119119
</html>''').substitute(
120120
GRAPHIQL_VERSION='0.10.2',
121121
SUBSCRIPTIONS_TRANSPORT_VERSION='0.7.0',
122-
subscriptionsEndpoint='ws://localhost:8000/subscriptions',
122+
subscriptionsEndpoint='ws://localhost:5000/subscriptions',
123123
# subscriptionsEndpoint='ws://localhost:5000/',
124124
endpointURL='/graphql',
125125
)

0 commit comments

Comments
 (0)