gRPC لـ Swift (iOS/macOS): المكتبات، الإعداد وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

gRPC لـ Swift (iOS/macOS): المكتبات والأمثلة



gRPC هو إطار عمل حديث عالي الأداء للاستدعاء عن بُعد للإجراءات (RPC)، طورته Google. يستخدم Protocol Buffers (protobuf) لتسلسل البيانات و HTTP/2 للنقل. في نظام Swift البيئي (iOS/macOS)، يتم تنفيذ gRPC من خلال مكتبة gRPC-Swift المبنية فوق إطار العمل غير المتزامن SwiftNIO. يتيح ذلك إنشاء تطبيقات عميل وخادم بلغة Swift مع دعم نقل البيانات المتدفقة، المهلات الزمنية والمصادقة.



المكتبات الرئيسية لـ gRPC في Swift

  • gRPC-Swift — المكتبة الرسمية من Apple و Google. توفر واجهة برمجة تطبيقات (API) لإنشاء خوادم وعملاء gRPC. تدعم التدفقات الأحادية، من الخادم، من العميل والثنائية الاتجاه.
  • SwiftNIO — إطار عمل غير متزامن منخفض المستوى للاتصالات الشبكية، والذي يعتمد عليه gRPC-Swift.
  • protoc-gen-swiftgrpc — إضافة لمترجم protoc، تقوم بتوليد كود Swift من ملفات .proto.
  • SwiftProtobuf — مكتبة للعمل مع رسائل protobuf في Swift (التسلسل/إلغاء التسلسل).


التثبيت عبر Swift Package Manager

أضف التبعيات في ملف Package.swift لمشروعك:

// 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") ] ) ])


إنشاء ملف .proto

حدد الخدمة والرسائل. مثال لملف helloworld.proto:

syntax = "proto3";

service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {}}

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


توليد كود Swift

قم بتثبيت protoc والإضافات:

brew install protobufbrew install swift-protobufbrew install grpc-swift

قم بتوليد الكود:

protoc helloworld.proto \    --proto_path=. \    --swift_out=. \    --grpc-swift_out=.

سيتم إنشاء الملفات helloworld.pb.swift و helloworld.grpc.swift.



مثال لخادم بلغة Swift (macOS)

import GRPCimport NIOimport HelloWorld // الوحدة المولدة

class GreeterProvider: Greeter_GreeterProvider { func sayHello(request: Greeter_HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<Greeter_HelloReply> { var reply = Greeter_HelloReply() reply.message = "مرحباً، \\(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("الخادم قيد التشغيل على localhost:50051")try server.onClose.wait()


مثال لعميل بلغة 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

توصيات