BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Sergio De Simone 关注 17 他的粉丝 ,译者 谢丽 关注 11 他的粉丝 发布于 2018年3月14日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

看新闻很累?看技术新闻更累?试试下载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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT