网库网(www.wangkuwang.com)精品网站源码,织梦建站模版,游戏源代码分享平台

模板户源码

当前位置:首页 -> CMS教程 -> dede教程 正文

以Swift作为服务器的软件框架功能对比(节选)

时间:2019-03-13 07:48:53 [整站源码]作者:zhaopulei


Ryan Collins Perfect官网

作者:Ryan Collins

翻译:Rocky Wei


当可用于生产服务器的Swift后台软件框架体系进入我的视野时,如何选择哪一种品牌来开始新项目是一个困难的问题。根据我个人的研究和经验,以下是时下最热门的软件体系的介绍和对比。


首先重要的事情说三遍:在决定最终选择之前,最好您亲自尝试所有的框架。我以前曾经做过上面的各个软件评测报告,但是真的不能仅仅依靠运行速度或者其他唯一指标来决定一切,最好都尝试一下。


目前最流行的服务器端Swift软件函数库/服务器包括了Vapor、Perfect、Kitura和Zewo。它们各自互不相同,我尝试了一圈然后来写这篇文章与您分享。我按照其支持的功能多少决定了论述的顺序,从功能最少到功能最多列出。


本文撰写时间为2017年3月,因此您在阅读时请注意这个时效性(因为每个厂家都在努力进步)。


从Zewo开始


Zewo受Go语言启发,采用了Go类型的并发(concurrency)因此避免了回调函数,采用麻省理工开源许可证,据我所知,该品牌为Github上一些独立程序员共同维护。


Zewo目前的性能速度已经足够快,并包括了运行一个服务器所需要的所有基本功能特征,包括HTTP服务器请求/响应,URL路由,TLS(SSL)传输认证加密,页面基本模板(Mustache),结构化数据(JSON/XML),还允许使用中间层(过滤器)。


Zewo支持Tunstile认证函数库,因此能够实现用户登录和会话管理。另外还原生支持JSON Web Tokens。Zewo提供的数据库驱动包括MySQL、PostgreSQL、Redis和RethinkDB,以及一个使用Postgre的数据库对象自动化管理(ORM)函数库。


在部署方面,Zewo具有Docker镜像并支持所有Swift原生平台(macOS 或 Ubuntu 14/16)。


在使用说明方面,Zewo有一个基本的项目范例,开发时必须执行的步骤,以及PostgresSQL的驱动使用指南。除此之外,范例中还包括了websockets和graphQL。目前Zewo的文档仅限于项目快速上手。


Zewo的优点:如果您喜欢使用Go风格的concurrency并发,并且讨厌用回调函数进行线程操作的话,那么Zewo是您希望使用的。尽管速度够快,而且不能算是最快的,我相信还是有可能有程序员希望使用Go风格并发。目前Zewo是所有Swift后台框架中唯一具有有效的graphQL示例的服务器,但并不是唯一支持graphQL的Swift组件,因为GraphQL本身就有一个第三方的Swift软件包。Zewo 的自持技术包括ZeroMQ消息队列和Lua脚本库,因此如果您想在服务器里使用Lua、连接到RethinkDB数据库或者与ZeroMQ打交道,那么Zewo就是唯一的选择。


Zewo的缺点:与本文提到的其他三巨头项目相比,Zewo属于一个小众产品,这意味着产品支持度有限;同时开发文档也非常糟糕——迄今(2017年3月)为止也就是一个快速上手的指南而已。如果您熟练掌握,则需要大量阅读其源代码并且经常访问他们的Slack频道,因为几乎没有什么现成的示范代码供参考。小众社区则意味着开发进度比较慢而且功能非常有限,无法与其他Swift后台软件相比,详见下文。


Zewo总结:如果您喜欢Go风格并发、讨厌回调函数,或者希望在Swift上使用ZeroMQ、Lua或者RethinkDB,那么Zewo是首选。如果您需要完善的文档、教程、或者更多的功能支持,那么最好再看看其他的软件。不过话要说回来,如果您希望亲自贡献大量代码或者文档,这倒是个好机会,因为我相信Zewo绝对需要您的社区支持。


下一个:Kitura


Kitura是由蓝色巨人IBM在2014年与苹果公司宣布企业合作时启动的项目之一,采用Apache 2.0许可证。


与Zewo的Swift后台基本功能一致,Kitura同样包含了这些标准功能,不过还包括了一些高级的特征。不过有一个显著的差别,就是Kitura只支持JSON作为唯一的原生结构化数据支持。如果您需要在Kitura为基础的项目上使用XML,那么很抱歉您不得不另找门路。Kitura还支持Aphid MqTT(物联网IoT消息队列服务)。


在用户认证方面,Kitura依赖于Kitura-Credentials加密工具。另外,Kitura还预装CORS/CSRF(网站交叉访问)中间层(用于过滤欺诈访问),还包括了比较热门的第三方登录工具,比如谷歌、脸谱和Github登录。但Kitura尚未实现对JSON Web Tokens的原生支持。


数据库方面Kitura是比较特殊的。对于传统关系型数据库,Kitura采用了一个SQL数据库抽象层Kuery(发音同Query查询)用于消除各种SQL数据实现的语法差异。通过Kuery,可以直接调用MySQL、SQLite和PostgreSQL。Kuery不是一个完整的ORM数据库对象自动化管理实现,但是使用抽象层确实比直接调用SQL语句会更Swifty(双关语:方便并且更贴近Swift品牌理念——译者注)一些。Kitura还包括对诸如Redis、CouchDB、Apache Cassandra和ScyllaDB的支持,但是这些原生支持非关系型数据库并没有融合到Kuery抽象层去。


在页面模板方面,Kitura不但支持Mustache,还支持Markdown和Stencil。此外Kitura还支持FastCGI,允许从Apache进行流挂接。更深入一些可以发现,Kitura还原生支持Watson API(包括气象分析数据),而且还有一个比较好用的HTML5对象实体函数库。


Kitura的部署当然是支持macOS和Ubuntu 14/16,但是与其他Swift后台软件相比,IBM提供在Bluemix云上对Swift 的 macOS 应用原生集成。如果您已经使用Bluemix云建网,那么Kitura有很明显的优势。


在文档支持方面,Kitura的在线资源还是很丰富的。其官方网站有一个做的很好的启动指南,并且所有的函数都有非常好的编程手册、结构清晰的教学文档以及在编译程序、测试和部署的辅助参考。


Kitura的优点:最显著的优点就是Bluemix云集成,使得mac应用能够直接上云,这一点非常不同。其次若干功能比如IBM Watson API函数库、Apache Cassandra和SyllaDB数据库、以及Stencil 模板,这些都是使得Kitura 在某些特定项目上会成为唯一的选择。


Kitura的缺点:在社区文化方面,Kitura在四种Swift框架体系的Slack用户数量比较中排第三。虽然其Slack群的人数比Zewo多一些,但是相比其他社区而言,Kitura社区的确不能算是够活跃,尽管我本人曾经获得IBM以及该社区的成员的在线支持。如果您想在Kitura中使用SQL,那么很抱歉您不得不使用其Kuery语法。尽管Kuery与SQL语言相比差别不算太大,但是总是要花一些时间才能上手。如果您希望使用Turnstile用于用户认证,那么对不起找别人吧。虽然Kitura有自己原生的用户认证函数库,但是Kitura真的是四个Swift后台软件中唯一不支持Turnstile的服务器框架。


Kitura总结:Kitura成名在于背后的蓝色巨人IBM。相信IBM短期内不太可能消失,因此Kitura的开发肯定会比较持久。尽管Kitura 没有最大的社区,也不具备最丰富的功能体系,但是已经能够基本满足很多程序员的需要。Kitura有一些独特的功能,但是如果要投入使用也不得不多学习一些新内容(Kuery关系数据库抽象层)。如果IBM的云平台比如Watson或Bluemix对您很有吸引力,那么Kitura是首选因为已经与上述IBM云做了后台集成。


压轴Vapor:


一旦接触Vapor您很快就会了解的两件事情:他们有最大最活跃的开发社区,而且Vapor的使用语法非常简单。Vapor是所有Swift 后台软件中完全使用Swift开发出来的软件。Vapor的所有权是一个初创公司Qutheory有限公司,该软件使用麻省理工开源许可证。


由于完全使用Swift,Vapor因此从一开始就有些不同。首先,Vapor为了实现“纯Swift“开发而牺牲了一些速度(注意速度不是唯一的也不是最重要的指标,这也是为什么我要写这篇文章的部分原因)。其次,Vapor也因为纯粹的Swift语法而使其源代码获得很好的易读性,并且不依赖于许多第三方软件,比如其他软件可能使用的是Node.js的HTTP语法分析器,但是Vapor开发了其原生的Swift 版本的HTTP解析器。这也是的其函数库能够以Swift语言的方式保持命名规范和易读性。就像Zewo热衷与Go风格的并发函数库一样,Vapor对于完全用Swift编写所有代码这件事情上也非常自豪。


Vapor有一组非常好的核心功能,包括他们自己开发的功能;但在基本功能中比较显著的是与Kitura和Zewo相比,Vapor缺乏对XML、CSRF反欺诈网站交叉访问中间层和FastCGI的支持。当然,Vapor也开发了很多Kitura和Zewo没有的功能,比如支持苹果的消息推送服务APNS,以及用SMTP发送邮件等,这两个函数库都很好用。


Vapor的数据库功能是比较完整的,不但包括对MySQL、Sqlite 和PostgreSQL的支持,还支持Redis和MongoDB。此外,Vapor支持SQLite / MySQL、PostgreSQL、MongoDB的数据库对象关系自动化管理(ORM),名称为Fluent。因为完全采用Swift接口,Fluent的驱动是协议导向的,因此很容易在此基础之上追加任何数据库驱动。


服务器Swift应用中比较流行的Turnstile用户身份验证框架已经集成到了Vapor之中,可以直接使用,不需要增加额外的依存关系。Vapor还包括了一个完整的加密函数库并提供原生支持。其他的原生函数库包括用户认证、会话管理、预装的数据库关系对象自动化管理ORM系统(Fluent)以及CORS(请求来源变化控制)中间层。


由于有庞大而活跃的社区支持,其开发进展非常可观。自2016年9月官方发布Vapor 1.0以来,该团队一直在努力;近期在公测Vapor 2.0的alpha版本,常常能看到每天有数次更新。


Vapor有一些独特的功能。首先除了Mustache和Markdown脚本之外,Vapor还有自己独立的模板引擎,名为Leaf(叶子)。由于采用Swift开发并直接集成到Vapor引擎,该脚本系统能够在Vapor服务器上很好地处理请求和响应。另外Vapor的路由验证系统也很独特,能够控制路由在传递参数时控制参数类型,比如整型Int。另外一个特点是使用SwiftyBeaver日志系统,并提供一系列用于创建和操控项目的命令行,这些命令能够直接在终端命令行中使用,或者通过其自带的homebrew进行操作。Vapor还提供了一系列Swift开发的命令行工具,包括进度指示器等等。Vapor本身的命令行工具也非常有特点,您可以通过扩展其终端协议来处理您程序中自己的命令行参数。


在部署方面,当然和其他所有Swift后台软件一样,可以原生支持macOS和Ubuntu 14/16,还包括了Docker的镜像,以及其Toolbox命令行辅助工具,用于在Heroku或Docker上运行。


文档方面Vapor的资源非常丰富,组织的很好,使用很方便,但是还不太完善(比如如果您需要查看MySQL的详细函数,则需要查看源代码)。Vapor还有一个非常独特的优点是他们有自己的在线教学视频网站——Vapor大学:http://vapor.university。该网站上包括了很多的Vapor教学及演示集锦,以及从热门IT教学网站Ray Wenderlich上发布的Vapor课程。Vapor的Github上包括了很多示范项目,比如Leaf模板、SQLite、认证、开发步骤、Vapor在线大学的网站源码、在线聊天源码、Fluent 数据库关系自动化管理系统 ORM、网站仪表盘 Dashboard、Pokedex(如果你喜欢抓皮卡丘小怪物)和一个Slack聊天机器人(就在本文发表的当天,Perfect 也推出了自己的SlackBot聊天机器人,位于Github/PerfectServers目录下——译者注)。Vapor甚至提供了一个最基本的中文文档。


Vapor的优点:Vapor有最干净简洁的语法和最庞大而活跃的开发社区。这些都使得Vapor对于初学者来说非常容易上手。Swift初学者们可以很快找到所有必要的教学资源、简洁的语法和非常活跃的社区支持。如果您在寻找完全由Swift语言开发的服务器后台,那么Vapor将是唯一的选择,因为其他的Swift服务器框架体系都至少包括一个以C语言为幕后基础的函数库。SwiftBeaver也是原生的,还有一个优点是在路由中检测变量类型、消息推送和SMTP简单邮件协议支持,数据库的支持也很好。


Vapor的缺点:由于纯粹使用Swift开发,Vapor牺牲了一些服务器的性能和速度。所以如果您需要吞吐量超大的服务器,那么要么掏银子增加预算,要么还是找其他选择吧。这不能算是慢,但是肯定不是最快的。虽然文档资源很丰富,但是其文档还是有提高的空间,特别是某些原生数据库支持方面(欢迎给他们提供改进方法)。


Vapor总结:Vapor非常适合初学者以及Swift纯粹主义者——语法简洁功能丰富。Vapor的开发社区庞大而活跃、演进和补丁的速度也够快,社区的支持反馈也很迅速。如果您的功能需求在Vapor提供范围内,而且您希望项目的语法精准易读、实现迅速,那么请选择Vapor。


最后的大轴Perfect


Perfect 是功能绝对强大、速度绝对够快的 Swift服务器软件体系。Perfect 有加拿大软件公司PerfectlySoft运营,获得了种子基金支持并在其母公司内孵化。而且值得一提的是Perfect的历史——其团队核心成员与苹果公司有很深的渊源——之前是Lasso计算机语言的核心成员——苹果公司早期的软件产品线Lasso。该团队开发服务器软件有很多年历史,随后才战略转移到了Swift语言。Perfect采用Apache 2.0许可证。


首先Perfect的显著特点之一就是包含了大量的源代码库。因为数量太多,所以Perfect将Github上将源代码划分为以下几个分支团队:

  • https://github.com/PerfectlySoft 主程序库,服务器引擎

  • https://github.com/PerfectExamples 所有的应用示例

  • https://github.com/SwiftORM StORM——数据库关系对象自动化管理 ORM 及驱动

  • https://github.com/PerfectServers 完整的预装服务器应用程序,可以迅速配置和部署

  • https://github.com/PerfectSideRepos 分支函数库(译者注:原文没有提到这个库,但是实际上包含了很多增强功能)


这可能是因为如果采用别的方式代码会比较难于管理,也的确是因为Perfect的功能过于丰富、参考示范代码也太多,所以不得不分开管理。


Perfect 包括了您所期待的所有基本功能,包括路由、websockets基于HTTP的网络套接字、TLS(SSL)通信加密、Mustache模板和Markdown模板、JSON结构化数据等等,以及全部其他所有Swift后台框架加在一起才有的XML结构化数据、苹果推送消息APNS、MqTT消息队列和SMTP邮件发送。实际上很难发现Perfect缺乏什么功能,可能唯一缺乏的就是路由参数类型验证机制。除非刻意去找茬,否则很难需要Perfect去配合IBM的服务或者采用Vapor自创的 Leaf 模板。Perfect 没有任何附加的命令行工具,不过Perfect 有自己独特的原生Mac图形界面应用程序。


Perfect的社区同Vapor一样庞大而活跃,在所有Swift后台框架中Slack用户人数排第二名,仅次于 Vapor(人数比Vapor稍微少一点)但是发展膨胀速度一样很快。


Perfect 的数据库支持非常广泛,其原生SQL驱动包括MySQL、SQLite、PostgreSQL和MariaDB,还支持MongoDB、Redis、CouchDB甚至还包括FileMaker(苹果自己的数据库Swift都不支持,Perfect反过来支持——译者注)。Perfect据说还部分支持微软的ODBC,即多种数据库的底层兼容界面——有点像ORM,但是以C函数库为基础。提到ORM数据库对象关系自动化管理,Perfect有StORM并完整实现了PostgreSQL、MySQL、CouchDB和SQLite。


首先在安全和用户认证上Perfect采用Turnstile。这是一个流行广泛的第三方开源框架,源自Stormpath,可以在github上找到。Perfect实现了Turnstile版本扩展、预装了不同的数据库集成来实现用户身份的验证机制。与Vapor一样,Perfect拥有自己的加密函数库,还包括了SPNEGO/Kerberos、LDAP轻量活动目录和微软Active Directory活动目录支持。Perfect 具备原生的OAuth2函数库,预装了很多流行的第三方登录机制,比如脸谱、谷歌、Github、领英和Slack等等。比较出名的是Perfect能够支持基本HTTP认证方法。Perfect还能够提供会话管理,最后,Perfect还提供如CORS和CSRF这样的反网站欺诈中间层。


Perfect具备一些非常独特的功能,而这些功能在其他地方是找不到的。Perfect 团队为此付出了巨大的努力而且结果值得称道。其中之一就是采用原生的cURL类函数库封装,使得Perfect用户能够直接使用libcurl。在文件管理方面Perfect有非常稳健的文件管理类包(创建、读取、写入和删除)、目录管理(创建、列表和删除)以及zip(压缩和解压缩)。Perfect 也是唯一提供MariaDB、ODBC甚至FileMaker的Swift 后台软件框架体系。


此外,Perfect 还非常独特的封装了OAuth2过程,而且在所有Swift服务器软件中,Perfect是唯一将所有文档完整翻译成中文的软件框架、并且所有主要的源代码库的README引导页也都翻译成了中文。除此之外,Perfect还是唯一预装了快速部署的服务器,以及二进制结构化数据BSON实现、以及唯一支持SPNEGO/Kerberos、LDAP轻量活动目录和微软Active Directory活动目录组件,甚至支持大数据(GridFS/Hadoop)的真正的服务器框架体系。


Perfect 还开发了一个原生的Mac图形界面应用程序,称为Perfect Assistant软件助手,不单单能够使用Perfect,而且能够加入所有基于Swift Package Manager 软件包管理器的项目。该助手是直接集成Docker并且能够进行Linux测试、亚马逊弹性计算云/谷歌云自动化部署。用户可以直接使用该助手启动空白项目,或者从项目模板中新建服务器应用。该助手还提供在本地计算机上一键编译双平台(mac 和 Linux)、清理项目、编译转化为Xcode项目(使得项目可以在Xcode内调用linux脚本交叉编译,太方便了)、运行测试以及更多操作。软件助手还能够进行项目依存关系管理、所有的SPM软件包管理操作都可以用鼠标拖拽完成。所有预装的组件都是Perfect或者高度集成Perfect的,但是您也可以自定义加入新的组件。


Perfect除了其为mac用户量身定做的助手应用程序之外,还与一个名为SCADE的专用IDE集成开发环境实现了内部集成。使用SCADE,不但可以直接编写Swift 的mac和linux应用,更犀利的事,该IDE还能够同时为iOS和安卓开发手机原生应用。SCADE通过其自行开发的SDK实现了从前端到后段的跨多种平台全栈开发。对于好奇心比较强的用户而言,目前SCADE处于私有beta版本测试状态,而且可以试用的唯一方法就是加入Perfect的Slack频道#swift-android-ios。


Perfect还支持多种部署方式,当然与其他软件框架一样支持Swift在macOS和Ubuntu 14/16上的开发。同时Perfect还有Docker镜像,也支持FastCGI的Apache集成,或者Heroku编译包。通过使用Perfect软件助手,还能够实现亚马逊弹性计算云或者谷歌云的一键部署,如前文所属。与其他复杂的部署选项相比,Perfect还具有一个非常独特的预装源程序,比如SwiftSlack,一个用Swift语言编写的Slack接入网站,允许邀请新用户加入您自己的Slack群。


Perfect 同样不缺乏培训资源。如前文介绍,Perfect旗下包括了Github上的一个团队仓库,集中了两个网页的各种样本项目范例,主题非常丰富。Perfect有一整套入门文档和API函数接口参考手册。如果您说中文,那么恭喜您,所有的指南都已经翻译成中文,而且大多数Perfect源代码仓库封面都有中文翻译。如果您需要视频教程,那么公开的内容也非常多,包括Perfect团队自己发布的剪辑、Ray Wenderlich在线教程,以及我自己也有一些视频教程。同样相关的文章也不少。与其他的Swift后台软件一样,Perfect有一个非常完整的入门指南。


Perfect 的优点:Perfect具有一个非常文件的功能集合,其中有许多功能是独一无二的。对应这些功能来说,Perfect还提供了很多样例程序供参考。这两点使得Perfect作为复杂工程的首选。如果您需要一个Swift服务器软件框架体系提供诸如cURL、Filemaker、Kerberos、Active Directory、BSON、Hadoop、GridFS、OAuth2或者ODBC之中任何一个模块支持来说,除了Perfect别的地方是找不到这样的东西的。而且,Perfect还是唯一的一个支持MariaDB的Swift软件框架,以及原生的文件/目录类封装、zip压缩解压缩函数库,如果你希望您的项目中涉及到任何一个上面提到的需求,则Perfect绝对是当之无愧独一无二的选项。Perfect的源代码也组织得井井有条,实现在Github上按照代码用途进行分类。尽管Zewo采用了Go语言风格非常邪乎的快速并发模型concurrent,但是相比之下Perfect还是所有服务器端Swift软件体系中速度最快的。


 Perfect的缺点:Perfect并不是语法最为简洁(简单)的函数库。由于Perfect是以功能技术为开发导向的专业产品,因此可能对缺乏编程经验的工程师来说不太容易上手。因为技术上过度注重性能,因此不少 Perfect专有的功能特性都以语法糖作为代价(函数接口形式稍微复杂——译者注),这一点Perfect 团队是承认的,但是尚未在开发社区内将其完善改进。另外Perfect的视频和教程不是集中管理的,而且很多是社区用户贡献的,因此相对比较分散,不像Vapor大学那样在线集中。


Perfect总结:Perfect丰富的功能体系使得Perfect为复杂项目开发提供了可能,这一点是无以伦比的。同样Perfect 庞大的示范代码、文档、教程和活跃的社区也能够支持大型项目的开发。因其优良的速度性能和强大的功能,基于Perfect的应用可以处理大量的文件目录或者大量的数据,还能够与如Filemaker或者微软Active Directory这些独特的系统进行集成。Perfect独特的伸缩性能够保证您放心使用,因为具有最快的请求/响应能力。同样Perfect还有非常丰富的底层函数库,因此实际上Vapor和Kitura是能够直接在Perfect基础上进行集成开发的。


全文总结


尽管所有的上述四个Swift服务器软件框架体系都希望做同一件事情,但是它们之间在能力和提供的资源上差别还是很大的,互相之间都很独一无二。请根据您自身对待开发项目的要求进行选择,比如您有什么偏好,对性能是否有要求等等。我建议您在作出最终选择之前对每种软件都评测尝试一下。


对于哪些还没有开发出来的功能来说,一旦开发出来肯定会特别有用,比如双效验证、带权限的安全认证体系或者服务器运行指标库、自建CSV表格文件支持等等。如果您希望贡献代码,那么欢迎您加入各个开发社区。

(原文此处提供了一些作者及其朋友圈提供的Swift函数库,不过因为多数都有不兼容Swift 3.1的问题,因此在本译文中不单独介绍,详情请参考原文)


我相信Swift的服务器开发前途一片光明。我自己已经使用了上面的一些软件用于我个人和我自己的客户项目开发。实话实说,我从来没有对服务器端的计算机语言有这么高兴的时候。同样我再也不想看到没有前途的项目,比如以前我一直在项目上使用 javascript,直到WebAssembly让我彻底放弃了JS脚本。随着时代进步,我相信会有更多更好的功能出现。



长按二维码关注Perfect 官网

微信号:PerfectlySoft (公司名)

如果需要帮助,请注册我们在Slack上的中文频道: http://perfect.ly/


    阅读原文

    发送中

    阅读原文

    本文标签:AutoTags插件服务端需要您提供购买者的账号和密码才能继续访问  折翼天使  莎莎源码  吾爱源码  其他源码 

    转载请注明来源:PHP手机端发卡多种支付商业版源码

    本文永久链接地址:https://www.suibianlu.com/11942.html

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
    若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法链接失效或侵犯版权,请给我们来信:admin@suibianlu.com

    栏目导航
    最新文章
    热门文章
    Top