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 中,建立网络连接变得前所未有的简单。开发者只需指定三个核心要素:
- 端点(Endpoint) - 定义连接目标
- 协议栈(Protocol Stack) - 规定连接方式
- 参数(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
