Grpc serverdan client unary istek yapilabilir mi?

102 views
Skip to first unread message

Recai Cingöz

unread,
May 22, 2021, 11:39:52 AM5/22/21
to Golang Türkiye
Merhabalar, benim takıldığım ve çözüm aradığım bir konu hakkında yardım almak istiyorum. Grcp unary mesajlasmada client servera istek atıyor ve server istek karşısında response dönüyor. Peki unary mesajlaşma ile clienttan istek beklemeden serverdan clienta istek gönderebiliyor muyuz? Aradığım cevap client stream, server stream değil. Genel yapı olarak iyi kötü deneyimledim ve projemde tüm mesajlasma tiplerini kullanıyorum.

Örnek senaryo anlatayım : Client üzrinde çalışan bir fonskiyonu  server üzerinden kapatmak istiyorum. Grpc unary çalışma prensibine baktığımda bunun için clienttan istek atmam ve ona göre bende serverdan cevap dönmem gerekecek. Ben gercek senaryomda client stream yapıyorum ve uygulama ilk açılışında server istek atıyorum ve serveri dinliyorum ve  gelecek durum mesajına göre ilgili fonksiyonları kapatıp açıyorum. Bu durum bana pek efektif ve verimli gelmedi içime sinmedi. Unary çalışma mantığını serverdan clienta nasıl yapabilirim? Farkli yaklaşımlarla durumu anlatmaya çalıştım umarım bu konu hakkında yorumlarınız olur. Teşekkür ederim.

Mehmet Gürevin

unread,
May 22, 2021, 12:34:38 PM5/22/21
to gola...@googlegroups.com
Merhaba, malesef grpc bidirectional rpc desteklemiyor. Server'dan client'a unary rpc mumkun degil. Eger sizin senaryoda client'in server'den gonderilecek mesaja verecegi yanit onemli degilse su an oldugu gibi server stream kullanmak gayet makul. Client'da islemin sonucu ile ilgili bir bilgi donmem gerek diyorsaniz bunu grpc ile yapmanin tek mumkun yolu transportation'i degistirmek. Yani normal kullanimda grpc'nin go kutuphanesi server tarafinda bir portu dinler, client tarafta ise server'a baglanti acilir ve h2 streamlar'lari uzerinden grpc protokolu isletilir. Transportation layer'i degistirmekten kastim ise client tarafinda connection'i initiate edip mevcut connection uzerinde grpc server baslatmak (client kodunda). Bu durumda baglantiyi initiate eden taraf hala client olacak ancak grpc server client'da calisiyor olacak, server tarafinda ise tam tersi. Boylece server'dan client'a unary rpc yapabileceksiniz.

On Sat, 22 May 2021 at 18:39, Recai Cingöz <recai...@gmail.com> wrote:
Merhabalar, benim takıldığım ve çözüm aradığım bir konu hakkında yardım almak istiyorum. Grcp unary mesajlasmada client servera istek atıyor ve server istek karşısında response dönüyor. Peki unary mesajlaşma ile clienttan istek beklemeden serverdan clienta istek gönderebiliyor muyuz? Aradığım cevap client stream, server stream değil. Genel yapı olarak iyi kötü deneyimledim ve projemde tüm mesajlasma tiplerini kullanıyorum.

Örnek senaryo anlatayım : Client üzrinde çalışan bir fonskiyonu  server üzerinden kapatmak istiyorum. Grpc unary çalışma prensibine baktığımda bunun için clienttan istek atmam ve ona göre bende serverdan cevap dönmem gerekecek. Ben gercek senaryomda client stream yapıyorum ve uygulama ilk açılışında server istek atıyorum ve serveri dinliyorum ve  gelecek durum mesajına göre ilgili fonksiyonları kapatıp açıyorum. Bu durum bana pek efektif ve verimli gelmedi içime sinmedi. Unary çalışma mantığını serverdan clienta nasıl yapabilirim? Farkli yaklaşımlarla durumu anlatmaya çalıştım umarım bu konu hakkında yorumlarınız olur. Teşekkür ederim.

--
Bu iletiyi Google Grupları'ndaki "Golang Türkiye" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için golang-tr+...@googlegroups.com adresine e-posta gönderin.
Bu tartışmayı web'de görüntülemek için https://groups.google.com/d/msgid/golang-tr/0a7042d1-1e27-488a-9e65-e2d5e5846867n%40googlegroups.com adresini ziyaret edin.

Recai Cingöz

unread,
May 22, 2021, 4:28:14 PM5/22/21
to Golang Türkiye
Geri dönüş için teşekkür ederim.  Client Server'dan gelen isteğe cevap olarak durumu güncelleyip güncellenmediğini bildiren boolen tipinde değer dönderiyor. Söylediklerinizle ilgili araştırma yapıp kaynak bulabilirsem denemeler yapacağım.  Teşekkür ederim.
22 Mayıs 2021 Cumartesi tarihinde saat 19:34:38 UTC+3 itibarıyla mehmet...@gmail.com şunları yazdı:

Uğur Özyılmazel

unread,
May 23, 2021, 1:45:10 PM5/23/21
to Golang Türkiye
Unary bildiğimiz en basit request -> response şeklinde işliyor ama gRPC'de 3 tane daha farklı yöntem bulunuyor. Server streaming, Client Streaming ve Bi Directional Streaming.

Server Streaming'de client ister atar, server data oluştukça ya da geldikçe client'e döner. Client bir istek yapar, cevap stream şeklinde gelir. request -> resp, resp, resp, ...

Client Streaming ise Server Streaming'in tam tersi. Client streaming connection açar, birden fazla mesajı basar. İlgili zamanda da cevap döner. req, req, req, req -> resp

Bi directionalda ise client stream olarak request yaparken cevap da stream olarak gelir... req, req, req, -> resp, resp, resp

Recai Cingöz

unread,
May 23, 2021, 3:53:34 PM5/23/21
to Golang Türkiye
Uğur hocam bilgileriniz için çok  teşekkür ederim. Benim gibi belki düşünüp yapan ya da yapmak isteyen birisi olmuştur diye merak etmiştim. Bahsettiğiniz gibi tüm yöntemleri kullanıyorum. Ben sadece unary yöntemini Server'dan Client'a atabilir miyiz sorusunu merak etmiştim. Dökümanda yoksa kullanılmıyor düşüncesine kapılmak istemiyorum. Çünkü win32 apilerle çalışıyorum dökümana aktarılmamış bir çok fonksiyon var. O yüzden ben bu konu için çözüm bulmaya çalışıyorum. Client içerisinde fonksiyon aç kapat işlemini Client Stream ile yapıyorum. Birikmiş datayı Bi Directional Stream ile Server'a aktarıyorum. @mehmet dediği yönteme henüz bakmadım. 

23 Mayıs 2021 Pazar tarihinde saat 20:45:10 UTC+3 itibarıyla ugurozy...@gmail.com şunları yazdı:

Erman İmer

unread,
May 24, 2021, 1:50:06 AM5/24/21
to gola...@googlegroups.com
Recai bey,

Uygulamanız içerisinde duruma göre client ve server'ın rollerini değiştirebilirsiniz.

Saygılarımla

Bu tartışmayı web'de görüntülemek için https://groups.google.com/d/msgid/golang-tr/496adf07-e8c4-40a9-b0aa-51a5da0647d0n%40googlegroups.com adresini ziyaret edin.


--
Erman İmer
Reply all
Reply to author
Forward
0 new messages