【问题标题】:Which Framework/Package to use for Swift Linux that also can be used for Vapor [closed]哪个框架/包可用于 Swift Linux,也可用于 Vapor [关闭]
【发布时间】:2021-12-26 02:17:46
【问题描述】:

我为外部 REST-API 编写了一个 API-Wrapper。此包装器为 iOS 和 macOS-Apps 提供了对该 API 的便捷访问。 但我想将该 API-Wrapper 扩展到 Linux 上的 Vapor。 Linux(带有 64 位的 RaspiOS)运行 Swift 5.5(没有 swift-corelibs-foundation),因此 URLSession 不可用。我试过SwiftyRequestAsyncHTTPClient 但两者都不能很好地与Vapor 配合使用。例如。 wait() 不能与 Vapor 一起使用,whenComplete() 绘制错误 * 潜在错误:uncleanShutdown* 而 syncShutdown 不能用于与 wait() 相同的原因

所以我一直无法连接到 API。

什么是执行独立和使用蒸汽的请求的正确方法?

【问题讨论】:

    标签: swift linux http vapor


    【解决方案1】:

    Vapor 有一个Client 协议,如果使用 Vapor,你应该使用它,但它是建立在 AsyncHTTPClient 之上的。你是对的,如果你在一个事件循环中,你不能使用wait(),但你应该使用未来的处理程序(或者更好的是新的异步/等待 API)。哪个部分报告了不干净的关机?如果它来自 AsyncHTTPClient,那么您调用的 API 没有正确关闭连接,但您可以将其配置为忽略它。

    顺便说一句,Vapor 需要 Foundation,所以无论如何你都需要它才能构建它

    【讨论】:

    • 蒸汽使用 Foundation 是正确的,Linux 的 Swift 也实现了 Foundation,但在 Linux 端 Swift(尤其是 piOS 的预构建包)缺少某些部分,例如URLSession。这就是为什么我必须使用外部框架。
    • 我的问题是我无法让 AsyncHTTPClient 在 Vapor 上工作,因为它与 wait()/syncShutdown()(EventLoop 中不允许)或 whenComplete() 崩溃,因为没有正确关机。
    • 听起来您正在创建自己的客户端和事件循环组——您不应该这样做。只需使用app.clientreq.client
    猜你喜欢
    • 2023-03-22
    • 2010-11-09
    • 2011-12-10
    • 2014-03-29
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多