gRPC İstemcisinden Çağrı Yapma
Hizmeti kullanın.
gRPC İstemcisinden Çağrı Yapma, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Oluşturulan İstemci
tonic her hizmet için, örneğin GreeterClient adlı bir istemci yapısını greeter_client modülünde oluşturur. Her RPC için bir eşzamansız yöntem sunar.
İstemciyi bir taşıma kanalıyla oluşturabilir veya doğrudan bir uç noktaya bağlayabilirsiniz.
use greeter::v1::greeter_client::GreeterClient;
use greeter::v1::HelloRequest;Sunucuya Bağlanma
En basit yol, bir adres dizesi alan ve bağlı bir istemci döndüren GreeterClient::connect kullanmaktır.
Bu işlem eşzamansız bir bağlamda çalışır; dolayısıyla #[tokio::main] altında .await ile çağırın.
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut client = GreeterClient::connect("http://[::1]:50051").await?;
Ok(())
}Tekli Çağrı Yapma
İletinizi bir tonic::Request içine sarın (veya Request::new kullanın) ve oluşturulan yöntemi çağırın.
Yanıt bir tonic::Response nesnesidir; iletiyi okumak için .into_inner() çağrısını kullanın.
let request = tonic::Request::new(HelloRequest { name: "Ada".into() });
let response = client.say_hello(request).await?;
println!("{}", response.into_inner().message);Status Hatalarını Ele Alma
Sunucu bir hata döndürürse çağrı Err(Status) sonucuna çözümlenir. Nasıl tepki vereceğinizi belirlemek için status.code() ve status.message() değerlerini inceleyin.
Bu, sunucu tarafındaki davranışın aynısıdır: NotFound veya Unauthenticated gibi kodlar istemciye geri gönderilir.
match client.say_hello(req).await {
Ok(resp) => println!("{}", resp.into_inner().message),
Err(status) => eprintln!("{}: {}", status.code(), status.message()),
}Kanal Oluşturma
Yeniden kullanım ve yapılandırma için Endpoint ile açıkça bir Channel oluşturun. Zaman aşımı, TCP canlı tutma ve bağlantı seçeneklerini ayarlayabilirsiniz.
Ardından istemciyi GreeterClient::new(channel) ile oluşturun.
use tonic::transport::{Channel, Endpoint};
let channel = Endpoint::from_static("http://[::1]:50051")
.timeout(std::time::Duration::from_secs(5))
.connect()
.await?;
let mut client = GreeterClient::new(channel);Üst Veri Gönderme
Kimlik doğrulama belirteçleri gibi üst bilgileri göndermeden önce istek üst verilerine ekleyin.
Değer için MetadataValue kullanın; bu değer geçerli bir ASCII üst bilgi değeri olmalıdır.
use tonic::metadata::MetadataValue;
let mut req = tonic::Request::new(HelloRequest { name: "Ada".into() });
let token: MetadataValue<_> = "Bearer abc123".parse()?;
req.metadata_mut().insert("authorization", token);Çağrı Başına Son Tarihler
Yavaş bir sunucunun istemciyi bekletmemesi için bir son tarih belirleyin. İstek üzerindeki set_timeout, süre aşılırsa isteği DeadlineExceeded durumuyla iptal eder.
Son tarihler sunucuya aktarılır; sunucu da çalışmayı erken durdurabilir.
let mut req = tonic::Request::new(HelloRequest { name: "Ada".into() });
req.set_timeout(std::time::Duration::from_secs(2));
let resp = client.say_hello(req).await?;Sunucu Akışını Tüketme
Sunucu akışlı bir çağrı bir akış döndürür. Akışı into_inner() ile alın ve None döndürülene kadar bir döngü içinde message().await ile iletileri çekin.
Her yinelemede kodu çözülmüş bir yanıt elde edilir.
let mut stream = client.server_stream(req).await?.into_inner();
while let Some(item) = stream.message().await? {
println!("{:?}", item);
}İstemci Akışı
İstemci akışlı bir çağrı için eşzamansız bir istek akışı aktarın. Bir yineleyiciyi veya kanalı tokio_stream ile sarıp yönteme verin.
Tek yanıt, gönderme işlemini tamamladıktan sonra gelir.
use tokio_stream::iter;
let outbound = iter(vec![msg1, msg2, msg3]);
let response = client.client_stream(Request::new(outbound)).await?;
println!("{:?}", response.into_inner());TLS Bağlantıları
Şifrelenmiş taşıma için bir CA sertifikası ve sunucu etki alanıyla ClientTlsConfig yapılandırın, ardından https üzerinden bağlanın.
Bunun için tonic bağımlılığında tls özelliğinin etkin olması gerekir.
use tonic::transport::{ClientTlsConfig, Endpoint};
let tls = ClientTlsConfig::new().domain_name("example.com");
let channel = Endpoint::from_static("https://example.com:50051")
.tls_config(tls)?
.connect()
.await?;İstemciyi Yeniden Kullanma
Temel Channel kolayca kopyalanabilir ve istekleri tek bir HTTP/2 bağlantısı üzerinden çoğullar. Yeniden bağlanmak yerine istemciyi görevler arasında kopyalayın.
Bu, eşzamanlılık altında bağlantı kurma maliyetlerini düşük tutar.
let client = GreeterClient::new(channel);
let mut c1 = client.clone();
let mut c2 = client.clone();
// use c1 and c2 in separate tokio tasksKısa Kontrol
tonic'te tekli istemci çağrısının sonucunu nasıl okursunuz?
Özet
Oluşturulmuş bir istemciyi bağladınız, tekli çağrılar yaptınız, Status hatalarını ele aldınız, yapılandırılmış kanallar oluşturdunuz, meta veriler gönderdiniz, son tarihler belirlediniz, sunucu ve istemci akışlarını tükettiniz, TLS'yi etkinleştirdiniz ve düşük maliyetle kopyalanabilen istemcileri yeniden kullandınız.
Artık tonic tabanlı eksiksiz gRPC hizmetlerini uçtan uca oluşturabilirsiniz.
Sıkça Sorulan Sorular
“gRPC İstemcisinden Çağrı Yapma” dersi ücretsiz mi?
Evet — “gRPC İstemcisinden Çağrı Yapma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“gRPC İstemcisinden Çağrı Yapma” dersinde ne öğreneceğim?
Hizmeti kullanın. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“gRPC İstemcisinden Çağrı Yapma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Protobuf ve Hizmet Tanımları
- tonic-build ile Kod Oluşturma
- gRPC Sunucusu Uygulama
- gRPC İstemcisinden Çağrı Yapma