gRPC für Swift (iOS/macOS): Bibliotheken und Beispiele
gRPC ist ein modernes, hochleistungsfähiges Framework für entfernte Prozeduraufrufe (RPC), entwickelt von Google. Es verwendet Protocol Buffers (protobuf) zur Datenserialisierung und HTTP/2 für den Transport. Im Swift-Ökosystem (iOS/macOS) wird gRPC über die Bibliothek gRPC-Swift implementiert, die auf dem asynchronen Framework SwiftNIO aufbaut. Dies ermöglicht die Erstellung sowohl von Client- als auch von Serveranwendungen in Swift mit Unterstützung für Datenstreaming, Timeouts und Authentifizierung.
Wichtige Bibliotheken für gRPC in Swift
- gRPC-Swift — offizielle Bibliothek von Apple und Google. Bietet eine API zur Erstellung von gRPC-Servern und -Clients. Unterstützt unäre, serverseitige, clientseitige und bidirektionale Streams.
- SwiftNIO — asynchrones Framework auf niedriger Ebene für die Netzwerkkommunikation, auf dem gRPC-Swift basiert.
- protoc-gen-swiftgrpc — Plugin für den Compiler protoc, das Swift-Code aus .proto-Dateien generiert.
- SwiftProtobuf — Bibliothek für die Arbeit mit protobuf-Nachrichten in Swift (Serialisierung/Deserialisierung).
Installation über Swift Package Manager
Fügen Sie die Abhängigkeiten in Package.swift Ihres Projekts hinzu:
// swift-tools-version:5.7import PackageDescription
let package = Package( name: "gRPCExample", platforms: [.macOS(.v12), .iOS(.v15)], dependencies: [ .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.21.0"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.21.0") ], targets: [ .executableTarget( name: "gRPCExample", dependencies: [ .product(name: "GRPC", package: "grpc-swift"), .product(name: "SwiftProtobuf", package: "swift-protobuf") ] ) ])Erstellen einer .proto-Datei
Definieren Sie den Dienst und die Nachrichten. Beispiel einer Datei helloworld.proto:
syntax = "proto3";
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {}}
message HelloRequest { string name = 1;}
message HelloReply { string message = 1;}Generierung von Swift-Code
Installieren Sie protoc und die Plugins:
brew install protobufbrew install swift-protobufbrew install grpc-swiftGenerieren Sie den Code:
protoc helloworld.proto \ --proto_path=. \ --swift_out=. \ --grpc-swift_out=.Es werden die Dateien helloworld.pb.swift und helloworld.grpc.swift erstellt.
Beispiel eines Servers in Swift (macOS)
import GRPCimport NIOimport HelloWorld // generiertes Modul
class GreeterProvider: Greeter_GreeterProvider { func sayHello(request: Greeter_HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<Greeter_HelloReply> { var reply = Greeter_HelloReply() reply.message = "Hallo, \\(request.name)!" return context.eventLoop.makeSucceededFuture(reply) }}
let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)defer { try! group.syncShutdownGracefully() }
let server = try Server.insecure(group: group) .withServiceProviders([GreeterProvider()]) .bind(host: "localhost", port: 50051) .wait()
print("Server gestartet auf localhost:50051")try server.onClose.wait()Beispiel eines Clients in Swift (iOS/macOS)
import GRPCimport NIOimport HelloWorld
let group = PlatformSupport.makeEventLoopGroup(loopCount: 1)defer { try! group.syncShutdownGracefully() }
let channel = try GRPCChannelPool.with( target: .host("localhost", port: 50051), transportSecurity: .plaintext, eventLoopGroup: group)defe Auch in der Bibliothek
Überwachung von PHP-Anwendungen mit der Bibliothek php-ast und xhprof
Bildverarbeitung in Node.js: resize, crop mit Sharp und Jimp
Arbeiten mit Bildern in Swift: resize und crop für iOS/macOS
Integration von Prometheus-Metriken in Kotlin-Anwendungen: Vollständige Anleitung