開源最前線(ID:OpenSourceTop) 猿妹 編譯
素材來自:https://github.com/apple/swift-nio
蘋果近日開源了以 Swift 編寫的跨平臺非同步事件驅動的網路應用框架 SwiftNIO ,用於快速開發可維護的高效能伺服器和客戶端。它很像Netty,但卻是用Swift編寫的。
低階非阻塞網路應用框架 SwiftNIO
授權協議:Apache 2.0
開發語言:Swift
作業系統:跨平臺
GitHub地址:https://github.com/apple/swift-nio
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伺服器:
要驗證它是否正常工作,可以使用其他shell嘗試連線它:
如果一切正常,就會看到控制臺上打印出來的訊息。
●本文編號244,以後想閱讀這篇文章直接輸入244即可
●輸入m獲取文章目錄
↓↓↓ 點選”閱讀原文” 進入GitHub詳情頁