在将 graphql-ws 客户端与 gqlgen golang 服务器连接时,获取到“ws://localhost:7080/query”的 WebSocket 连接失败

Posted

技术标签:

【中文标题】在将 graphql-ws 客户端与 gqlgen golang 服务器连接时,获取到“ws://localhost:7080/query”的 WebSocket 连接失败【英文标题】:Getting WebSocket connection to 'ws://localhost:7080/query' failed on connecting graphql-ws client with gqlgen golang server 【发布时间】:2021-08-12 22:30:28 【问题描述】:

下面列出的订阅查询在 graphql playground 上运行良好,但是当我尝试将我的 graphql-ws 客户端与 gqlgen 驱动的 go 服务器连接时,我得到 WebSocket 连接到 'ws: //localhost:7080/query' failed 错误。我尝试使用 graphql-ws 的 useServer 功能 连接到本地运行的其他 localhost 服务器,该功能运行良好,但在连接 go 服务器时出现问题。

客户代码:-

(async () => 
 const client = graphqlWs.createClient(
            url: 'ws://localhost:7080/query',
        );


 const onNext = (data) => 
          /* handle incoming values */
          console.log("data===>", data)
  ;

    await new Promise((resolve, reject) => 
                unsubscribe = client.subscribe(
                    
                        query: `subscription 
                            ping
                          `
                       
                    ,
                    
                        next: onNext,
                        error: reject,
                        complete: resolve
                    ,
                );
            );
             catch(e) 
                console.error("E==>", e)
            
   )();  

自过去两天以来一直在努力获取一些有用的博客和在线链接,但没有发现任何将 go 服务器与 vanilla js 连接起来的有用信息。还在其 github 页面上搜索了 graphql-ws 库中列出的问题,但也没有列出此类问题。

如果需要其他信息,请告诉我。

【问题讨论】:

【参考方案1】:

如果你说的是this gqlgen,它不支持GraphQL over WebSocket Protocol graphql-ws 实现。 It, sadly, supports only the legacy protocol of subscriptions-transport-ws.(这就是 graphql-playground 起作用的原因)。这意味着,您必须将subscriptions-transport-ws 与他们的后端一起使用。

【讨论】:

是的,我只使用了这个 gqlgen,但是在上面 github 链接的 L65 中,它写成 "Sec-Websocket-Protocol": []string"graphql-ws",,所以这里提到了 graphql-ws。我是不是理解错了。那么,这行"Sec-Websocket-Protocol": []string"graphql-ws",是什么意思 the new GraphQL over WebSocket is graphql-transport-ws 的子协议,不是graphql-ws(属于subscriptions-transport-ws)。

以上是关于在将 graphql-ws 客户端与 gqlgen golang 服务器连接时,获取到“ws://localhost:7080/query”的 WebSocket 连接失败的主要内容,如果未能解决你的问题,请参考以下文章

在将套接字与端点绑定之前如何找到可用端口?

错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头。无法重定向与应有的页面不同的页面

在将 Heroku 与 Github 结合使用时发布版本

为啥我在 Nodejs 中收到“无法在将标头发送到客户端后设置标头”错误?

在将 HTML 字符串发送到客户端之前格式化 HTML 字符串的 C# 工具[关闭]

GraphQL 突变“在将标头发送到客户端后无法设置标头”