在graphql客户端使用时无法建立WebSocket连接

Posted

技术标签:

【中文标题】在graphql客户端使用时无法建立WebSocket连接【英文标题】:WebSocket connection cannot be established when used in graphql client 【发布时间】:2021-07-25 22:34:34 【问题描述】:

我正在尝试通过来自 graphql 服务器的订阅将数据获取到客户端。为此,我们需要先建立一个 websocket 连接。但是,当我尝试这样做时,我会收到以下错误

错误:

WebSocket connection to 'ws://localhost:8888/' failed: Unexpected response code: 400
liveReload — index.js:53

客户端代码:

import  WebSocketLink  from "@apollo/client/link/ws";
const wsLink = new WebSocketLink(
  uri: "ws://localhost:8888",
  options: 
    reconnect: false
  
);

我 100% 确定 localhost:8888 是托管 graphql 服务器的位置。我在 safari 和 firefox 中都尝试过

【问题讨论】:

如果您查看响应本身,是否有任何错误描述?例如,您在 devtools 中查看网络检查器,您可能会看到有关失败的更多信息。 你确定这个 API 支持 websocket 连接吗? 【参考方案1】:

您必须在 graphql 服务器声明中明确指定订阅路径,如下所示

const server = new ApolloServer(
  typeDefs,
  resolvers,
  subscriptions: 
    **path: "/subscriptions"**
  ,
  context: 
    pubsub
  
);

【讨论】:

以上是关于在graphql客户端使用时无法建立WebSocket连接的主要内容,如果未能解决你的问题,请参考以下文章

本人对于netty框架的一些理解,怎么与网站上的websock建立连接

websock第一次连不上window

“在建立安全 TLS 连接之前断开客户端网络套接字” - Neo4j/GraphQL

在 Kotlin Android 中使用 Apollo 客户端使用 GraphQL API 时无法执行 HTTP 调用

Apollo/GraphQL 在询问 ID 时无法获取引用的实体

无法使用 graphql-ruby 订阅进行简单广播