写点什么

苹果开源 Swift 底层非阻塞 I/O 框架 SwiftNIO

  • 2018 年 3 月 13 日
  • 本文字数:902 字

    阅读完需:约 3 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

在近日举行的 try! Swift 东京大会上,苹果宣布了 SwiftNIO 项目,这是一个用 Swift 编写的、类似 Netty 的非阻塞、跨平台 I/O 框架。

SwiftNIO 是一个为开发高性能服务器和客户端而设计的事件驱动的异步网络框架。目前,该框架在 macOS (10.12+)和 Linux(Ubuntu 14.04)上进行开发和测试。据苹果介绍:

SwiftNIO 是一个跨平台的、事件驱动的异步网络框架,用于开发可维护的高性能协议服务器 & 客户端。

SwiftNIO 旨在成为一个构建网络应用程序和框架的底层工具,致力于提供低开销的 I/O 原语和协议实现。因此,通常可以将 SwiftNIO 视为一个构造块,用于构建供应用程序使用的高层网络通信框架,或者是供有苛刻要求的应用程序直接使用的高性能框架。通过这种方法,针对大多数网络协议的支持在源码树外被实现出来。按照苹果 SwiftNIO 工程师 Cory Benfield 的说法,虽然 HTTP/1.1 协议的支持在源码树内,但 TLS 支持、Websocket 和 HTTP/2 支持在源码树外。

EventLoop是 SwiftNIO 提供的一个基本抽象。该对象会等待事件,并在事件发生时触发某个回调方法。在理想情况下,会有一个或者两个核心事件循环。为了在事件循环之间分配负载,可以使用EventLoopGroup。在EventLoop之上是ChannelChannelPipeline。它们提供了一种友好的方式,可以在与特定文件描述符关联的事件到来时发送通知,并调度处理。ChannelHandler提供了管道顺序执行事件处理的步骤。所有的处理器都是在同一个线程中执行,不需要同步,实现起来更简单。这也意味着处理器不能阻塞。SwiftNIO 提供的最高层抽象是Bootstrap,简化特定场景的通道创建,如ServerBootstrapClientBootstrapDatagramBootstrap。要了解所有细节,请查阅官方文档

在Package.swift 中添加以下依赖项可以把SwiftNIO 包含到自己的项目中:

复制代码
dependencies: [
.package(url: "https://github.com/apple/swift-nio.git", from: "1.0.0")
]

此外,SwiftNIO 提供了两个示例 NIOChat 和 NIOEcho ,说明该框架的使用方法。

查看英文原文 Apple Open-sources SwiftNIO, a Low-level Non-Blocking I/O Framework for Swift

2018 年 3 月 13 日 19:001227
用户头像

发布了 1008 篇内容, 共 342.5 次阅读, 收获喜欢 328 次。

关注

评论

发布
暂无评论
发现更多内容

【PIMF】OpenHarmony 啃论文俱乐部—盘点开源鸿蒙三方库【3】

离北况归

OpenHarmony

架构实战营模块 8 作业

星夜

架构实战营

消息队列存储消息数据的MySQL表格

Pengfei

面试突击69:TCP 可靠吗?为什么?

王磊

Java面试题

基于mysql的消息队列设计

Geek_e8bfe4

C#/VB.NET 将PPT或PPTX转换为图像

Geek_249eec

C# SVG PPT png VB.NET

《ArchSummit:时代的呐喊,技术人听得到》

后台技术汇

后台开发 架构师 ArchSummit

数据中台建设(七):数据资产管理

Lansonli

数据中台 8月月更

从RabbitMQ平滑迁移到RocketMQ技术实战

vivo互联网技术

RocketMQ RabbitMQ 消息队列 消息中间件 Apache RocketMQ

【云驻共创】【HCSD大咖直播】亲授大厂面试秘诀

黎燃

7月月更

Web3.0:构建 NFT 市场(一)

devpoint

区块链 NFT 7月月更

elasticsearch安装和使用ik分词器

程序员欣宸

Java Elastic Search 8月月更

elasticsearch实战三部曲之三:搜索操作

程序员欣宸

Java elasticsearch 7月月更

一文带你了解 Grafana 最新开源项目 Mimir 的前世今生

Grafana 爱好者

Mimir Observability

内核对设备树的处理

贾献华

7月月更

设计消息队列存储消息数据的MySQL表格

Geek_7a789a

重庆市大力实施智能建造,推动建筑业数字化转型,助力“建造强市”

科技热闻

轮询和长轮询的区别

CRMEB

架构实战营模块八作业

融冰

消息队列消息存储设计(架构实战营 模块八作业)

Gor

JavaScript高级程序设计(第4版)-生成器

掘金安东尼

JavaScript 前端 7月月更

Prometheus 监控什么时候可以使用 PushGateway

耳东@Erdong

Prometheus PushGateway 7月月更

如何撰写出一篇优质的数码类好物推荐文

石头IT视角

一文概述:VPN的基本模型及业务类型

穿过生命散发芬芳

vpn 7月月更

博弈论(Depu)与孙子兵法(42/100)

hackstoic

博弈论

新书上市 |《谁在掷骰子?》在“不确定性时代”中确定前行

图灵教育

学习Java的网站

玄兴梦影

Java core

数字化转型实践:世界级2B数字化营销的方法框架

雨果

数字化转型 DaaS数据即服务

如何设计高可用高性能中间件 - 作业

阿拉阿拉幽幽

mysql进阶(二十二)MySQL错误之Incorrect string value中文字符输入错误问题分析

No Silver Bullet

MySQL 特殊字符 8月月更

表达式引擎在转转平台的实践

转转技术团队

表达式 引擎

苹果开源Swift底层非阻塞I/O框架SwiftNIO_开源_Sergio De Simone_InfoQ精选文章