使用 WebSocket 的原始 javascript GraphQL 订阅不起作用

Posted

技术标签:

【中文标题】使用 WebSocket 的原始 javascript GraphQL 订阅不起作用【英文标题】:Raw javascript GraphQL subscription with WebSocket not working 【发布时间】:2020-01-19 14:44:13 【问题描述】:

我正在尝试创建一段原始代码来侦听 graphQL 订阅,但由于某些原因我无法使其工作。

我正在尝试模仿从 GraphQL 控制台发送的原始请求,您可以在此处看到

看起来很简单。所以我做了以下javascript代码:

const WebSocket = require("ws");

const connection = new WebSocket("ws://localhost:4000/graphql")

connection.onopen = () => 
  console.log("connection open")
  let init = JSON.stringify(type:"connection_init",payload:Authorization:"Bearer eyJhbG.....HIDDEN....dDgw")
  let listen = JSON.stringify("id":"1","type":"start","payload":"variables":,"extensions":,"operationName":null,"query":"subscription \n  followJob(idJob: \"ck0pa2r8r8pit0b17f3k6s729\") \n    progress\n  \n\n")
  connection.send(init)
  connection.send(listen)


connection.onmessage = e => 
  console.log("data coming")
  console.log(e.data)


connection.onerror = e =>
  console.log(e)



(function wait () 
  setTimeout(wait, 1000000);
)();

GraphQL 服务器确实收到了请求,并且具有与控制台发出的请求完全相同的消息数据,但由于某些原因,此后它不会处理查询,也不会在日志中抛出任何错误或消息。 .

你知道我可能会错过什么吗?

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

只需要像这样指定 websocket 协议

const connection = new WebSocket("ws://localhost:4000/graphql","graphql-ws")

【讨论】:

以上是关于使用 WebSocket 的原始 javascript GraphQL 订阅不起作用的主要内容,如果未能解决你的问题,请参考以下文章

即使不涉及 Web 浏览器,也可以在原始 tcp 上使用 websocket:好主意吗?

Flash 中的 WebSocket 与原始 TCP 套接字

播放框架1.2.5 Websocket

用nodejs快速实现websocket服务端(带SSL证书生成)

关于内存泄漏

flask使用websocket