新开源报道 52苹果开源跨平台低阶非阻塞网络应用框架 SwiftNIO

Posted 开源最前线

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新开源报道 52苹果开源跨平台低阶非阻塞网络应用框架 SwiftNIO相关的知识,希望对你有一定的参考价值。

开源最前线(ID:OpenSourceTop) 猿妹 编译

素材来自:https://github.com/apple/swift-nio


苹果近日开源了以 Swift 编写的跨平台异步事件驱动的网路应用框架 SwiftNIO ,用于快速开发可维护的高性能服务器和客户端。它很像Netty,但却是用Swift编写的。


低阶非阻塞网络应用框架 SwiftNIO


授权协议:Apache 2.0

开发语言:Swift

操作系统:跨平台


 SwiftNIO 简介


该框架的目标并非提供给一般开发者,从根本上说, SwiftNIO是一个在Swift中构建高性能网络应用程序的低阶工具。所以苹果希望高阶网路应用框架可以用 SwiftNIO 来提供网路功能,开发者再以这些框架开发应用。


SwiftNIO 的第一个单词为 Swift ,NIO则是非阻塞(Non-blocking)I/O的缩写。苹果表示,项目主要针对那些使用“ thread-per-connection”模型(每个请求对应一个线程)的并发性效率低下或无法使用的用例。SwiftNIO非阻塞 I/O 的设计,也有别于多数常见的非阻塞 I/O 模型,SwiftNIO要求内核在进行 I/O 操作时主动发出通知,而非被动等待资料从网路传送或接收。


SwiftNIO 的目标不是提供像Web框架那样的高级解决方案,相反,它专注提供基础的 I/O 功能与协定,并成为高阶应用的构建块之一。在构建Web应用程序时,大多数用户不想直接使用SwiftNIO,相反,他们会想要使用Swift生态系统中可用的其他优秀Web框架中的一个。但是,这些Web框架可能会选择使用SwiftNIO来提供其网络支持。


SwiftNIO 的目标是支持 Swift 所支持的所有平台。目前,它是在 macOS 和 Linux 上进行开发和测试的,支持以下操作系统版本:

● Ubuntu 14.04+

● macOS 10.12+



 SwiftNIO 基础架构


所有SwiftNIO应用程序最终都由以下这些不同的组件构成:

● EventLoopGroup

● EventLoop

● Channel

● ChannelHandler

● Bootstrap

● ByteBuffer

● EventLoopPromise和EventLoopFuture两个泛型类



 SwiftNIO 设计理念


SwiftNIO旨在成为强大的构建网络应用程序开发框架,但并不打算成为各种抽象级别提供完美的解决方案。SwiftNIO非常专注于、提供基本的I / O原语和底层的协议实现,SwiftNIO将成为服务器端应用程序的基石,但不一定是那些应用程序将直接使用的框架。


对性能有极高要求的应用程序可能会选择直接使用SwiftNIO,以减少其上层抽象的的消耗成本。SwiftNIO能够帮助这些应用程序以相对较低的维护成本维持极高的性能。SwiftNIO还专注于为某些场景提供了有用的抽象,从而可以直接构建极高性能的网络服务器。


SwiftNIO的核心仓库包含一些非常重要的协议实现,例如HTTP。但是,我们认为大多数协议实现,应该要和底层网络协议栈的发布周期分开,因为发布节奏可能会非常不同(要么更快,要么更慢)。出于这个原因,我们积极鼓励社区自己去开发和维护他们的协议实现。事实上,SwiftNIO 提供的一些协议实现最初就是由社区开发的,比如 TLS 和 HTTP/2。



 SwiftNIO 运行示例


目前有一些例子,演示了如何使用 SwiftNIO。

● 聊天客户端:https://github.com/apple/swift-nio/tree/master/Sources/NIOChatClient

● 聊天服务器端:https://github.com/apple/swift-nio/tree/master/Sources/NIOChatServer

● Echo 客户端:https://github.com/apple/swift-nio/tree/master/Sources/NIOEchoClient

● Echo 服务器端:https://github.com/apple/swift-nio/tree/master/Sources/NIOEchoServer

● Http 服务器:https://github.com/apple/swift-nio/tree/master/Sources/NIOHTTP1Server



开始使用 SwiftNIO


SwiftNIO主要使用SwiftPM作为它的构建工具,所以我们也推荐使用它。如果你想在你自己的项目中使用SwiftNIO,只需在Package.swift 加入依赖:



然后将适当的SwiftNIO模块添加到你的依赖列表中。


然后可以直接复制SwiftNIO代码库至本地,并使用SwiftPM来帮助构建它。例如,您可以运行以下命令来编译和运行示例Echo服务器:


【新开源报道 52】苹果开源跨平台低阶非阻塞网络应用框架 SwiftNIO


要验证它是否正常工作,可以使用其他shell尝试连接它:



如果一切正常,就会看到控制台上打印出来的消息。



●本文编号184,以后想阅读这篇文章直接输入184即可

●输入m获取文章目录

↓↓↓ 点击"阅读原文" 进入GitHub详情页 

以上是关于新开源报道 52苹果开源跨平台低阶非阻塞网络应用框架 SwiftNIO的主要内容,如果未能解决你的问题,请参考以下文章

新开源报道 41阿里正式开源动态非侵入 AOP 解决方案 JVM-Sandbox

新开源报道 9Google开源Abseil,为C++和Python开发提供支持

新开源报道 6百度开源移动端深度学习框架mobile-deep-learning(MDL)

新开源报道 26滴滴开源基于 Vue.js 的移动端组件库 cube-ui

Q新闻|Swift开源新消息;苹果史上第二款Android App于 Google Play 上架……

科技云报道:开源“新风潮”