Swift 会话

Swift 会话是一个 Swift 包,它实现了二进制会话类型,为确保并发系统中安全和结构化的通信提供了一个强大的框架。

该库目前支持以下功能

作者和致谢

该库是作为卡梅利诺大学学士学位论文项目的一部分开发的。 该项目由 Alessio RubiciniLuca Padovani 教授的指导下完成。

概述

编程风格

该库提供两种不同的会话类型管理风格

每种风格都提供了一种独特的处理基于会话的二进制通信的方法,并且各有优缺点。 通过支持这两种风格,SwiftSessions 允许您根据您的需求和编码偏好选择最佳方法(或以混合方式使用两者!)。

有关其他示例,请参见 Tests 文件夹。

客户端/服务器架构

除了创建像之前的示例中那样的一次性会话之外,您还可以使用客户端/服务器架构风格来初始化会话。

服务器负责创建和管理多个可以处理特定协议的会话。 可以生成许多客户端并与同一服务器一起使用,以根据定义的协议进行对偶交互。 这允许我们只定义一次协议的一侧,并根据需要多次使用它。

// Server side
let server = await Server { e in
    await Session.recv(from: e) { num, e in
        await Session.send(num % 2 == 0, on: e) { e in
            Session.close(e)
        }
    }
}

// Client side
let c1 = await Client(for: server) { e in
    await Session.send(42, on: e) { e in
        await Session.recv(from: e) { isEven, e in
            Session.close(e)
        }
    }
}

// You can spawn more clients here...

这种架构适用于多个客户端需要与单个服务器交互的场景。 它也适用于实现涉及循环和递归的复杂协议。

未来方向

Swift 6.0 将引入新功能,例如 noncopyable generics,这将显着增强该库的功能,从而实现静态线性检查。

安装

要将 SwiftSessions 集成到您的项目中,请使用 Swift Package Manager。

  1. 将以下依赖项添加到您的 Package.swift 文件中
dependencies: [
    .package(url: "https://github.com/alessiorubicini/SwiftSessions.git", .upToNextMajor(from: "1.0.0"))
]
  1. 然后,将 SwiftSessions 添加到您的目标依赖项中
.target(
    name: "YourTargetName",
    dependencies: [
        .product(name: "SwiftSessions", package: "SwiftSessions")
    ]
)

要求

许可

此项目根据 MIT 许可证获得许可。 有关更多详细信息,请参见 LICENSE 文件。