哪个框架/包可用于 Swift Linux,也可用于 Vapor [关闭]

Posted

技术标签:

【中文标题】哪个框架/包可用于 Swift Linux,也可用于 Vapor [关闭]【英文标题】:Which Framework/Package to use for Swift Linux that also can be used for Vapor [closed] 【发布时间】: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 不可用。我试过SwiftyRequest 和AsyncHTTPClient 但两者都不能很好地与Vapor 配合使用。例如。 wait() 不能与 Vapor 一起使用,whenComplete() 绘制错误 * 潜在错误:uncleanShutdown* 而 syncShutdown 不能用于与 wait() 相同的原因

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

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

【问题讨论】:

【参考方案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

以上是关于哪个框架/包可用于 Swift Linux,也可用于 Vapor [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IOS/SWIFT/OBJ-C/CORDOVa 上获取手指 ID(哪个手指用于触摸 ID)或唯一触摸 ID

Java 框架选择题

哪些包可用于在 LaTeX 中排版 SQL?

检查 swift 中是不是有可用的互联网连接 [重复]

错误 ITMS-90207:捆绑包不包含捆绑包可执行文件

Android与Swift iOS开发:语言与框架对比