swift - Vapor参数解码挂起HTTP请求

标签 swift http docker digital-ocean vapor

我有一个奇怪的问题。我在 digital ocean 机器上的 docker 内部运行 Vapor。 除了 PATCH 和 DELETE 请求之外,我的所有请求都按预期工作。

在以下代码中,patch Enter 将被记录,但不会记录参数解码。 HTTP 请求似乎会永远运行,并且其他并行请求是不可能的

func patch(_ req: Request) throws -> Future<Manufacturer> {
    let logger = try req.make(Logger.self)
    logger.info("patch enter")
    return try req.parameters.next(Manufacturer.self).flatMap { manufacturer in
        logger.info("parameter decode")
        return try req.content.decode(Manufacturer.self).flatMap { patchManufacturer in
            logger.info("content decode")
            manufacturer.name = patchManufacturer.name
            return manufacturer.save(on: req)
        }
    }
}

使用 req.parameters.next(ModelName.self).flatMap 的所有其他方法在我的 digital ocean docker 机器中也不起作用。

类似简单的创建工作:

func create(_ req: Request) throws -> Future<Manufacturer> {
    return try req.content.decode(Manufacturer.self).flatMap { manufacturer in
        return manufacturer.save(on: req)
    }
}

所以我认为一定有问题:

return try req.parameters.next(Manufacturer.self).flatMap { manufacturer in

奇怪的部分是:当我在我的 Mac 上启动相同的 docker compose 配置时, 一切都按预期进行 - 没有挂起的 http 请求。

我不知道该怎么做才能发现错误,有人可以帮助我吗? 如果我应该提供一些文件来解决问题,请留下简短的说明,我将更新帖子。

谢谢!

最佳答案

我从 Vapor Discord 聊天中的很棒的人那里得到了解决方案:https://discord.gg/BnXmVGA

感谢@vzsg和@jimmya92。

Steam 应用程序在最小的 digital ocean 水滴上运行:

  • 1GB内存
  • 1vCPU
  • 25GB 固态硬盘

there's a known issue that Fluent's default configuration limits the number of connections too much on single core systems which can lead to deadlocks like this drop this in configure.swift to work around it:

let poolConfig = DatabaseConnectionPoolConfig(maxConnections: 16)
services.register(poolConfig)

关于swift - Vapor参数解码挂起HTTP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873680/

相关文章:

ios - (Swift)需要逐步了解如何在 View Controller 之间滑动

java - 如何在 Android 中使用 HTTP GET?

bash - 使用 fish 在 docker build 命令中传递参数

php - Mysql docker 容器上的 Symfony 4 连接

pointers - 在 swift 中将 CFContextRef 转换为可变的 void 指针?

快速异步网络。出现错误时如何重试?

javascript - 如何将数据发送给用户,这些数据将在网页浏览之间持续存在,但不会重新发送到服务器?

java - 如何通过 Mule HTTP 监听器获取准确的特殊字符

php - Mysqli错误2002 : no such file or directory

swift - 如何使 Onboarding 与 iOS13 中的 Scene Delegate 配合使用?