GraphQL Elixir/Phoenix API:Socket 挂起,响应很大

Posted

技术标签:

【中文标题】GraphQL Elixir/Phoenix API:Socket 挂起,响应很大【英文标题】:GraphQL Elixir/Phoenix API: Socket hang up with large json response 【发布时间】:2021-09-08 23:26:51 【问题描述】:

Elixir/Phoenix 和 GraphQL 的新手。我创建了一个简单的 API,可以从 PostgreSQL 数据库中检索“绘图”。该表由“id”(uuid)和“drawing_json”(文本)组成。表中有一行,json 字符串约为 77Kb。我的架构和查询是使用苦艾酒定义的。我有 1 个名为“all_drawings”的查询,它解决并联系到 Repo 并提取所有图纸。使用 postman 调用此 API 时,以下查询正常:


   allDrawings
   
       id
   

但是,当我尝试返回 json 字段以及邮递员请求超时时,我收到“套接字挂断”错误。

查看 Visual Studio Code 中的调试控制台,我可以看到查询从数据库中获取数据非常好,几乎是立即的。尽管将其返回给我无法检测到的客户,但似乎正在发生一些事情。不会抛出任何错误。有任何想法吗?不确定哪些信息会有所帮助,但很乐意提供更多信息。

【问题讨论】:

您的数据库中有多少行?您是对查询实施限制,还是返回所有可用行? @Everett 仅出于测试目的,我在表中只有一行从中提取。它会拉出所有可用的行,但只有一个。就像我说的那样,我可以在调试控制台中看到,当我点击发送时,它几乎立即打印结果,并带有来自 db 的预期结果。尽管尝试向下游发送该响应时发生了一些事情,但我似乎无法获得描述性错误消息。我知道在 .NET api 中你已经设置了 maxrequestlength 来处理更大的响应。也许这也是同样的路线?如果是这样,我该如何在 Elixir/Phoenix/GraphQL 中处理这个问题? 我不得不四处寻找设置,但凤凰城一定有类似的东西。还可以流式传输输出,这可能会更好。您能否分享正在使用的确切 JSON 正文,以便我们尝试重现该问题? ***.com/q/56416447/6124657 - 作为字符串返回以避免类型检查 我试图在本地重现:我制作了一个简单的 Phoenix 应用程序,在数据库中有一些非常大的行,API 响应仍然正常(响应大小超过 26mb)。也许您可以共享您的数据库架构和迁移?如果您将日志级别设置为调试,请查看是否弹出任何内容。 【参考方案1】:

一位同事帮我找到了解决办法。不知道为什么会这样(也许有人可以详细说明),但问题在于尝试在 Visual Studio Code 中运行它。以前,我在 launch.json 中设置了运行任务,然后单击运行按钮开始调试我的应用程序。这每次都会导致上述崩溃。当我去终端运行“mix phx.server”命令时,一切正常。在使用 IDE 进行调试时,不确定挂断是与 Visual Studio Code 还是 ElixirLS 扩展有关。但是通过命令行启动应用程序允许我使用邮递员访问 api 并很好地检索数据。我对 Elixir/Phoenix 世界很陌生,所以我无法对为什么会发生这种情况做出更明智的结论。

【讨论】:

以上是关于GraphQL Elixir/Phoenix API:Socket 挂起,响应很大的主要内容,如果未能解决你的问题,请参考以下文章

Elixir/Phoenix 日期从工作日 + 周数

如何使用 elixir/phoenix 从 csv 文件导入用户?

从 Phoenix / Elixir GET 函数中调用 Typescript 函数

将 elixir phoenix 应用程序部署到 heroku - 无法添加 buildpack

导入错误:无法从“apollo-link-state/lib/bundle.umd.js”中找到模块“graphql”

Phoenix 1.1.4 早午餐问题