network 框架是在 apple 平台上建立底层网络连接的最佳方式,而在 ios、ipados、和 macos 26 上,它非常适合与你的结构化并发代码搭配使用。我们将探索如何建立连接、发送和接收数据与分帧处理的信息、监听传入连接以及浏览网络上的服务。在此期间,我们还将介绍一些关键的最佳做法。

视频封面
视频地址

此文章由AI生成,可能存在错误,如有问题,请联系djs66256@163.com

探索 Network 框架中的结构化并发编程

Network 框架作为 Apple 平台底层网络连接的核心解决方案,在 iOS、iPadOS 和 macOS 26 系统中迎来了重大革新。该框架现已深度整合 Swift 的结构化并发特性,为开发者提供了更加现代化、简洁高效的网络编程体验。

现代化网络连接的构建

Network 框架彻底摒弃了传统 socket 编程的复杂性,无需开发者处理 sockaddr 结构体或晦涩的 ioctl 调用。取而代之的是优雅的声明式 API 设计和自动化的网络管理功能。

框架内置的关键特性包括:

  • 自动域名解析的”按名连接”(Connect by Name)功能
  • 动态选择最优路径的”快乐眼珠”(Happy Eyeballs)算法
  • 原生的 TLS 加密支持
  • 智能网络接口切换和代理支持
  • 现代传输协议如 QUIC 的原生集成

这些特性使开发者能够专注于业务逻辑,而不必操心底层网络细节。

声明式连接建立

在 iOS/macOS 26 中,建立网络连接变得前所未有的简单。开发者只需指定三个核心要素:

  1. 端点(Endpoint) - 定义连接目标
  2. 协议栈(Protocol Stack) - 规定连接方式
  3. 参数(Parameters) - 细化连接配置

一个典型的 TLS 加密连接示例:

let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
  TLS()
}

框架会自动推断并添加必要的 TCP 和 IP 协议层。如需进一步自定义,开发者可以使用嵌套式的声明语法:

let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029) {
  TLS {
    TCP {
      IP()
        .fragmentationEnabled(false)
    }
  }
}

智能化数据传输

Network 框架的数据收发操作完全采用异步设计,与 Swift 的结构化并发完美融合。基本的数据收发操作简洁明了:

let outgoingData = Data("Hello, world!".utf8)
try await connection.send(outgoingData)

let incomingData = try await connection.receive(exactly: 98).content

对于不确定长度的数据流,框架提供了灵活的接收模式:

while remaining > 0 {
    let imageChunk = try await connection.receive(atLeast: 1, atMost: remaining).content
    remaining -= imageChunk.count
}

消息分帧与对象传输

为解决流式协议的消息边界问题,iOS/macOS 26 引入了 TLV (Type-Length-Value) 分帧器:

enum GameMessage: Int {
  case selectedCharacter = 0
  case move = 1
}

let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
    TLV { TLS() }
}
try await connection.send(characterData, type: GameMessage.selectedCharacter.rawValue)

更令人惊喜的是对 Swift Codable 的原生支持,开发者可以直接收发对象:

enum GameMessage: Codable {
  case selectedCharacter(String)
  case move(row: Int, column: Int)
}

let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
    Coder(GameMessage.self, using: .json) { TLS() }
}
try await connection.send(GameMessage.selectedCharacter("🐨"))
let message = try await connection.receive().content

服务监听与设备发现

处理入站连接的 NetworkListener 采用了与 NetworkConnection 类似的设计模式:

try await NetworkListener {
    Coder(GameMessage.self, using: .json) { TLS() }
}.run { connection in
    for try await (gameMessage, _) in connection.messages {
        // 处理游戏消息
    }
}

设备发现方面,新的 NetworkBrowser 整合了 Wi-Fi Aware 技术,支持跨平台点对点发现:

let endpoint = try await NetworkBrowser(for: .wifiAware(.connecting(to: .allPairedDevices, from: .ticTacToeService))).run { endpoints in
    .finish(endpoints.first!)
}

协议选择指南

开发者可根据不同场景选择合适的协议组合:

  • 与第三方服务通信:遵循对方协议规范
  • 自主应用间通信:推荐 Codable + TLS/QUIC
  • 现有 URLSession 用户:可继续使用现有方案

总结

iOS/macOS 26 为 Network 框架带来的革新包括:

  • 三大核心组件:NetworkConnection、NetworkListener、NetworkBrowser
  • 新型消息分帧器和对象传输支持
  • 声明式 API 设计语言
  • 深度结构化并发集成

这些改进使网络编程更加现代化、高效,同时保持了框架原有的灵活性和强大功能。开发者现在可以更轻松地构建可靠、安全的网络应用,充分发挥 Swift 并发的优势。

相关视频

借助 Wi-Fi Aware 增强设备连接性能
采用 Swift 并发
Introducing Network.framework: A modern alternative to Sockets

文档资源

Network
NetworkBrowser
NetworkConnection
NetworkListener