Swift在服务器上(2020)

2021-04-26 10:48:41

Swift是一种现代,互动,类型安全的编程语言,铭记性能。它是业内增长最快的编程语言之一。在过去的几年里,Swift已经获得了如此多的吸引力,有些人喜欢它,其他人可能会讨厌它,但有一件事是肯定的:

Swift和脚本语言一样易于使用,而不会牺牲任何性能。这意味着大多数情况下的C样表现,这对于大多数人来说应该是足够的。

在开始,Swift被视为对Apple平台的Objective-C的替代品,但是Don'愚弄了。 SWIFT是一种通用的目的编程语言,所以你可以用它构建任何东西。它运行在嵌入式系统上,当然您可以使用SWIFT制作iOS应用程序和伟大的桌面类应用程序,您可以使用它来编写机器的机器学习算法(Tensorflow),构建后端服务器,即使是实验操作系统,但让我停下来。 ✋🏻

Swift到处都是,它已经改变了很多,但现在我们可以将其视为成熟的编程语言。仍有一些丢失/讨厌的东西,它' d很高兴有更多(轻量级)的工具(例如,你仍然可以' t' t运行包的软件包而不安装xcode),但我们慢慢地到达那里。 Apple将使用Apple Silicon建立新一代硬件设备,他们' ve努力重写底层软件组件(我敢打赌,已经有很多Swift代码),所以我说这是只是故事的开头。 🚀

SSWG位于正确的轨道上。一开始,我认为他们决定了一个非常缓慢的速度,但现在看起来他们知道如何以有效的方式共同努力。值得一提的是,这个小组拥有来自大公司的一些非常有才华的人,例如Apple,Amazon,MongoDB或Vapor社区。他们负责优先考虑"需要做什么"对于服务器社区,他们运行潜伏过程,以便与Swift核心团队的后端相关的包和频道反馈进行潜在进程,以便它们可以快速地解决语言本身的底层问题。

不幸的是,在去年年底,IBM宣布他们正在远离服务器上的SWIFT,但事实证明,社区将能够拯救和维护Kitura Web框架。无论如何,如果您正在寻找替代解决方案,蒸气4几乎准备就绪。 🙈

晚些时候,今年汤姆多伦,Swift核心团队和Swift服务器工作组的成员宣布将支持更多的Linux发行版。这是一个很棒的新闻,您现在可以下载七种不同平台的官方Swift发布。夜间和官方Docker图像也可用于SWIFT,这是由Mishal Shah宣布在Swift论坛上的宣布。

随着迅速发展的迅速,语言被添加了越来越大的功能。这些实现还推动了转发服务器侧项目。 2015年SWIFT开放后,它在2015年被采购时(它变得适用于Linux)标准图书馆,基金会是完全缺少的越野车和许多我们所拥有的语言特征。幸运的是,这变化了很多。 D Say Swift 5是稳定的第一版本,足以构建可靠的后端服务器。 🤖

随着SWIFT 5.0 ABI稳定性已到达,最后我们能够在没有整个标准库和二进制中包含的运行时构建应用程序。我们仍然必须等待大约半年的模块稳定,到达Swift 5.1在2019年底到达。如果您有兴趣开发框架或图书馆,您还应阅读Swift中的图书馆演变。

SPM图书馆现在与我们同时在一起,但在开始我们Weren'它能够为AppleOS平台使用它。 Xcode 11最终向我们带来了完整的集成,开发人员开始使用SPM与iOS应用程序集成第三方依赖项。对不起,我必须这样说,但目前spm是半烤的。当Swift 5.3将被释放时,我们只能运送二进制依赖关系和资源。在开始,SPM显然是为了帮助提高开源SWIFT包,库和工具主要在服务器端。

老实说,我认为这种方法取得了相当成功,该项目在一开始就明确发挥了一些问题,但最终SPM将成为我们大多数人的一个事实上的工具。我很确定作者正在努力使这个项目令人惊叹,他们需要时间解决引擎盖下的硬件(依赖性分辨率等),所以我们(常规SWIFT开发人员)可以集成我们的项目用外部包装以一种愉快的方式。 🙏

我从SPM都错过了什么?嗯,我喜欢能够在Xcode中只更新一个包,而不是刷新整个依赖树。当您使用多个依赖项时,这可能需要一段时间(特别是当依赖性非常大时)。好的,好的,这更像是一个Xcode功能,但这是另一个:i' d喜欢通过spm构建和分类动态库。这种方式框架作者可以提供可以在多个包中重用的动态版本。我不是唯一一个拥有这个特定问题的问题。请帮助我们。 😢

无论如何,SPM是分发SWIFT包和I' M很高兴我们有这么多选项来构建后端。让我向您展示一些最鼓舞人心的开源项目,可以用于开发服务器应用程序。这些库中的大多数都被苹果支持,所以他们赢得了' t去任何地方,我们可以确定这样一个大型组织将更新和支持它们。 Apple正在使用此内容来构建一些基于云的平台的基础架构。 ☁️

Swiftnio是一种跨平台异步事件驱动的网络应用程序框架,可快速开发可维护的高性能协议服务器和amp;客户。换句话说,它' s一个非常性能的低级网络框架,您可以使用非阻塞方法构建您自己的服务器或客户端。

您可以找到大量伟大的教程,例如如何构建文本修改服务器或异步问题的实用指南,即使是如何制作叫做" microxpress"来自Node.js World的着名快递Web框架。

你也找到了关于Swiftnio的很棒的文档,但我必须重复自己,这是一个非常低的级别框架,所以如果没有先前的网络编程体验,也许是'最好选择高度等级框架,如蒸气甚至是斯威夫特的CMS才开始。

如果您正在寻找HTTP客户端库,则Asynchttpclient包可能是一个很棒的候选者。该框架使用非阻塞异步模型来用于请求方法,它还可以遵循重定向,支持流体下载,TLS和Cookie解析。

几个月前,通过官方SWIFT博客推出SWIFT AWS Lambda运行时套餐。如果您想使用AWS Lambda服务和Swift编程语言开发无服务功能,您必须仔细看看此包。 Fabian Fett写了一篇关于AWS Lambda的Swift入门的伟大教程,也有一个WWDC20会话视频关于使用Swift在AWS Lambda与Xcode。老实说,我没有时间玩这个图书馆,因为我大多专注于我的CMS,但我可以等待使用SWIFT无服务器。 🤔

AWS SDK Swift库提供对所有AWS服务的访问。第五个主要版本几乎是完整的,亚当福勒最近曾制作了一个关于最新变化的博客文章。就个人地,我正在使用这个包来存储在AWS S3上的图像,它像魅力一样工作。拥有这样一个巨大的图书馆的唯一缺点是,SPM需要很长时间,使其将其提取为依赖(我只使用S3,但我仍然必须加载整个包)。无论如何,如果您的基础架构高度取决于亚马逊Web服务,并且您必须通过SWIFT访问大多数可用解决方案,这是您应该选择的框架。 😎

SWIFT服务生命周期包是管理服务器的优雅方式。它提供了一个基本的机制,以便清理启动并关闭后端应用程序,以便在退出之前可以免费提供资源。它还提供了一种基于信号的Shutdown挂钩,因此您可以收听特定事件。

有关详细信息,您应该阅读Github上的介绍博客文章或Readme。

Apple最近推出了Swift群集成员资格存储库。老实说,我不太了解游泳协议,但它似乎是你想要构建和管理分布式系统的生命周期的重要性。此库旨在通过SWIFT帮助构建集群Mutli-Node环境。对我来说,这是一个全新的地区,但我认为它' s绝对是一个有趣的东西,我想在将来更多地了解这一点。 🤓

以下是使用SWIFT构建后端服务器时可以使用的其他一些库。

第一个有助于您在应用程序失败时打印崩溃回溯。 Crypto是Apple' cryptokit框架的跨平台迅速实现。这是Cory Benfield在DotSwift会议上宣布的一个年轻项目,但该项目已经具有来自Cryptokit的大多数功能。

如果您有一个服务器端或跨平台SWIFT应用程序,您可能希望测量您的一些代码。 SWIFT指标API包是发出此类记录的好方法。

有一个官方的日志记录API包,用于迅速使用来持续到文件中的日志消息,或者只需使用标准化方式将各种消息打印到控制台。

在文章的开头,我提到SSWG对服务器相关包具有孵化过程。如果您有特定的需求,请在官方SWIFT编程语言网站上查看当前可用项目的状态始终是一个好主意。 🔍

蒸气是在SWIFT中写的最受欢迎的网络框架。如果您想开始使用vapor 4,您肯定应该看看我的实用服务器端Swift书籍,或者您可以在我的博客上使用所有免费资源。文章部分有一个专门的蒸气类别,我认为在过去的几个月里,我写了很多关于蒸气的蒸气,所以我不想再次重复自己。 😅

如果您正在寻找开源CMS(您知道,带管理界面的东西)随时可以检查羽毛。它是一种由Vapor 4供电的现代Swift的内容管理系统。

正如您可以看到服务器端SWIFT基础架构正在快速发展。 Swift可以播放越来越多的平台(Windows支持即将到来),加上语言本身就是一个好方法,它有潜在的"履行预言" 🌎💪😅

除了缺失的部件之外,例如长期等待(双关语)异步/等待特征,在长期迅速6上肯定将成为一个庞大的里程碑。不要期望这会很快发生这种情况,我们仍然需要5.3次发布,谁知道,也许迅速5.4等等。

我知道更好:为什么选择SWIFT作为你的主要语言?好吧,斯威夫特现代,快速安全。它可以在许多平台上运行,它有一个很好的学习曲线。 Swift有一个光明的未来,不是因为苹果,而是因为喜欢(有时讨厌)使用它的巨大社区。

你不需要一个昂贵的Apple设备来开始学习迅速。您可以使用带Linux的PC构建自己的应用程序。您甚至可以使用小&amp开始使用;廉价的覆盆子PI,SWIFTIO机器或者这款在线SWIFT游乐场可以完成这项工作。 💡

我不想比较Swift到另一种语言,让' s只是说我认为它是JavaScript&amp的一个爱情孩子; C.我希望这个类比几乎解释了它(以一种很好的方式)。 😂