Websocket $connect 成功响应不会导致任何 client-side/browser 成功
Websocket $connect successful response doesn’t result in any client-side/browser success
我在 AWS API 网关和 Serverless Framework 上使用 Websockets。
我已经设置了一个连接处理程序函数,该函数通过自定义授权者(成功)和 returns 一个 object 本身,在回调和 return 语句中只是为了确定:
const result: APIGatewayProxyResult = {
statusCode: OK,
headers: {
'Sec-WebSocket-Protocol': 'graphql-ws',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
body: 'Connected'
};
callback(null, result);
return result;
日志显示一切顺利,但由于某种原因,浏览器 websocket 没有响应(在 Google Chrome 或 Safari 中测试)和没有消息的错误。然后它断开连接(这似乎触发了 $disconnect 处理程序)。好像有3 x 101
来自localhost 的websocket 移动,这不是我打的远程wss:// url
对于客户端 websocket 连接,我使用来自 apollo 的 subscriptions-transport-ws@0.9.16(标准选项)。
每隔 4 次或第 5 次,我就会在浏览器中看到错误 error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received
。
我正在发送一些请求 headers,不确定我是否打算在服务器上对它们做任何事情:
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: xxx
Sec-WebSocket-Protocol: graphql-ws
Sec-WebSocket-Version: 13
Upgrade: websocket
任何帮助都会很棒!提前致谢。
通常您的 WebSocket 事件处理程序响应不会发送回客户端。如果您想通过 WebSocket 发送数据,您可以通过 API Gateway Management API.
异步发送数据
如果您的连接出错并意外断开连接,则说明您的自定义授权器或 websocket $connect
路由处理程序出错。如果您在日志中看到这些 运行 成功,请检查 API 的 API 网关日志。您需要通过 API 网关 -> 您的 API -> 阶段 -> 您的阶段 -> Logs/Tracing 单独启用此功能。您的通信中所有较低级别的错误都可以在这里找到。
我发现 subscriptions-transport-ws@0.9.16
导致了问题。我切换到 RxJS webSocket lib 并且工作正常。我假设 Apollo lib 正在某处添加 headers 。可能会有更好的答案,但现在我已经解决了。
我在 AWS API 网关和 Serverless Framework 上使用 Websockets。
我已经设置了一个连接处理程序函数,该函数通过自定义授权者(成功)和 returns 一个 object 本身,在回调和 return 语句中只是为了确定:
const result: APIGatewayProxyResult = {
statusCode: OK,
headers: {
'Sec-WebSocket-Protocol': 'graphql-ws',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
body: 'Connected'
};
callback(null, result);
return result;
日志显示一切顺利,但由于某种原因,浏览器 websocket 没有响应(在 Google Chrome 或 Safari 中测试)和没有消息的错误。然后它断开连接(这似乎触发了 $disconnect 处理程序)。好像有3 x 101
来自localhost 的websocket 移动,这不是我打的远程wss:// url
对于客户端 websocket 连接,我使用来自 apollo 的 subscriptions-transport-ws@0.9.16(标准选项)。
每隔 4 次或第 5 次,我就会在浏览器中看到错误 error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received
。
我正在发送一些请求 headers,不确定我是否打算在服务器上对它们做任何事情:
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: xxx
Sec-WebSocket-Protocol: graphql-ws
Sec-WebSocket-Version: 13
Upgrade: websocket
任何帮助都会很棒!提前致谢。
通常您的 WebSocket 事件处理程序响应不会发送回客户端。如果您想通过 WebSocket 发送数据,您可以通过 API Gateway Management API.
异步发送数据如果您的连接出错并意外断开连接,则说明您的自定义授权器或 websocket $connect
路由处理程序出错。如果您在日志中看到这些 运行 成功,请检查 API 的 API 网关日志。您需要通过 API 网关 -> 您的 API -> 阶段 -> 您的阶段 -> Logs/Tracing 单独启用此功能。您的通信中所有较低级别的错误都可以在这里找到。
我发现 subscriptions-transport-ws@0.9.16
导致了问题。我切换到 RxJS webSocket lib 并且工作正常。我假设 Apollo lib 正在某处添加 headers 。可能会有更好的答案,但现在我已经解决了。