我有一个反应前端和一个 python 后端(使用ariadne==0.13.0, uvicorn==0.15.0, uvicorn[standard]==0.15.0, fastapi==0.68.1
)通过 graphql 订阅进行通信。只要我不重新加载页面或从同一 IP 在新的浏览器窗口中加载页面,一切正常。然后页面崩溃并需要一些时间才能恢复 - 取决于 uvicorn 中配置的 websocket 超时。我的前端和 graphql playgorund 都遇到了同样的问题。我了解不同的浏览器或选项卡使用相同的 IP、端口和协议标识,这可能会破坏现有连接,但仍然应该可以使用来自不同选项卡的页面,如下所示:
https://fastapi.tiangolo .com/advanced/websockets/
我的代码:
SCHEMA = load_schema_from_path("schema.graphql")
query = QueryType()
subscription = SubscriptionType()
app = FastAPI()
schema = make_executable_schema(SCHEMA, [query, subscription])
graphql_server = GraphQL(schema, debug=True)
app.add_route("/graphql", graphql_server)
app.add_websocket_route("/graphql", graphql_server)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["POST", "GET"],
allow_headers=[
"accept",
"accept-language",
"content-language",
"content-type",
"x-apollo-tracing",
],
)
app.debug = True
uvicorn.run(app, host='0.0.0.0', port=7996)