• Buradasın

    gRPC ile Dosya Transferi Uygulaması Eğitimi

    youtube.com/watch?v=qsja_QJQsuY

    Yapay zekadan makale özeti

    • Bu video, bir eğitmen tarafından sunulan teknik bir eğitim dersidir. Eğitmen, gRPC kütüphanesi ve Protobuf protokolü kullanarak dosya transferi işlemlerini adım adım göstermektedir.
    • Video, gRPC'nin streaming özelliğini kullanarak dosya yükleme (upload) ve indirme (download) operasyonlarının nasıl yapılacağını kapsamaktadır. İçerik, proto dosyası oluşturma, servis tanımlama, client ve server kodlaması, dosya akışı yönetimi ve hata ayıklama gibi konuları içermektedir. Eğitmen, Visual Studio Code'da kodlama yaparak, dosya transferi işlemlerini gerçek bir uygulama üzerinden göstermektedir.
    • Videoda ayrıca dosya transferinde kullanılan terminolojiler (buffer, chunk), streaming operasyonları, dosya boyutu yönetimi ve yükleme durumunun yüzdelik olarak hesaplanması gibi teknik detaylar da ele alınmaktadır. Eğitmen, hem server hem de client tarafında uygulamaları oluşturarak, dosya transferinin tam bir yaşam döngüsünü göstermektedir.
    CRPC Kütüphanesi ve Dosya Transferi Örneği
    • Bu derste CRPC kütüphanesi ile gerçek hayattan örnek bir uygulama geliştirilecek.
    • Önceki derste JRPC kütüphanesi ile client-server arasındaki dört farklı iletişimi ele alınmış ve bu derste pratik bir örnek oluşturulacak.
    • CRPC, HTTP/2 protokolünü kullandığından dolayı request ve response süreçlerinde streaming özelliğine sahip olup, bu özelliği dosya transfer operasyonlarında kullanışlıdır.
    01:15Dosya Transfer İşlemi
    • Client ve server arasında dosya transferi için iki fonksiyon kullanılacak: file upload ve file download.
    • Client, elindeki dosyayı server'a aktarmak isteyince file upload fonksiyonunu çağırır ve dosyayı küçük parçalara böler.
    • Server'a yüklenen bir dosyayı indirmek için client file download fonksiyonunu çağırır ve dosya parça parça gelir.
    02:32İletişim Türleri
    • Dosya upload işlemi için client tarafından streaming operasyonu kullanılır.
    • Dosya download işlemi için ise server tarafından streaming operasyonu kullanılır.
    • İletişim türünü belirlerken yapacağımız işe odaklanmak gerekir, işimiz bize uygun iletişim türünü ortaya çıkarır.
    04:39GRPC Proje Hazırlığı
    • Proje için client ve server oluşturulmuş, hazır gelen proto ve servis sınıfları silinerek sıfırdan oluşturulacak.
    • Gerekli kütüphaneler client için yüklenmiştir.
    • GRPC'de proto dosyası, client ve server arasındaki sözleşme (kontrat) görevi görür.
    07:42Proto Dosyası Oluşturma
    • Proto dosyası için namespace tanımlaması yapılır.
    • Servis oluşturulur ve içinde file upload ve file download fonksiyonları tanımlanır.
    • Request ve response için kullanılacak mesaj türleri tasarlanacaktır.
    09:34Steaming Operasyonu
    • Steaming operasyonu, büyük dosyaları küçük parçalara bölüp gönderip, karşı tarafta tekrar birleştirmek için kullanılan bir yöntemdir.
    • Gönderilecek her bir parçaya "buffer" veya "chunk" denir ve mümkün mertebe en küçük parçalar halinde gönderilmelidir.
    • Karşı tarafta parçalar birleştirildiğinde, akış tamamlanmış olur ve "stream edilmiş data" olarak adlandırılır.
    10:53Dosya Transferi İçin Gerekli Bilgiler
    • Dosya transferi için iki tür bilgi gereklidir: dosyanın genel bilgisi ve parçaların bilgileri.
    • Dosyanın genel bilgisi için "file info" adında bir mesaj oluşturulur ve dosyanın adı (file name) ve uzantısı (file extension) bu mesajda gönderilir.
    • Parçaların bilgileri için "bytes content" adında bir mesaj oluşturulur ve bu mesajda dosyanın toplam boyutu, her bir parçanın boyutu ve dosyadan okunan toplam veri miktarı bulunur.
    15:02Protobuf Mesajları ve Servis Oluşturma
    • Client, dosya transferi için "file info" mesajını gönderir ve server bu mesajı alıp dosyayı parçalara bölerek (steaming) gönderir.
    • Upload işlemi tamamlandığında geriye bir şey döndürmek istenmiyorsa, Google tarafından tanımlanan "google.protobuf.Empty" türü kullanılır.
    • Protobuf dosyası oluşturulduktan sonra, servis için gerekli arayüzler otomatik olarak oluşturulur ve servis sınıfı bu arayüzden türetilir.
    19:57Visual Studio'da Hata Çözümü
    • Editörsel bir hata nedeniyle Visual Studio'da karşılaşılan sorun, kodu kapatıp tekrar açarak çözülmüştür.
    • Visual Studio'da bazen beklenmedik yerlerde hata vermesi, geliştirme sürecini zorlaştırabilir.
    20:41Dosya Yükleme İşlemi
    • Protobuf dosyasında streaming yöntemiyle white content gönderildiği için, gelen request stream'ini yakalayıp belirli bir alana tahsis etmek gerekiyor.
    • Dosyaların depolanacağı "www.root" dizini oluşturulup, app.use static files ile erişim sağlanmıştır.
    22:29Dosya Yükleme İşlemi İçin Hazırlık
    • WebPostEnvironment üzerinden web host environment'ın web root path'i alınarak dosyaların depolanacağı dizin belirlenmiştir.
    • "files" klasörü oluşturulmuş ve upload yapıldığında, eğer klasör yoksa otomatik olarak oluşturulması sağlanmıştır.
    24:49Dosya Yükleme İşlemi
    • Dosya yükleme işlemi için file stream nesnesi oluşturulmuş ve gelen request stream'inden veri alınmaya başlanmıştır.
    • Gelen ilk stream'de alan tahsisinde bulunulmuş, sonrasında gelen veriler bu alana yazdırılmaktadır.
    • Gelen white string verisi toByteArray() metodu ile byte array formatına dönüştürülmüş ve file stream'e yazdırılmaktadır.
    30:40Dosya Yükleme İşlemi
    • Dosya yükleme işlemi sırasında gelen datanın byte'ı 100 ile çarpılarak yüzdelik değer elde ediliyor ve bu değer toplam dosya boyutuna bölünerek yükleme durumu hesaplanıyor.
    • İşlem bittikten sonra file stream'i dispose edilmeli ve upload durumunda empty türünde bir değer döndürülerek işlem tamamlanıyor.
    • File upload operasyonu başarıyla sağlanmış oluyor.
    32:47Dosya İndirme İşlemi
    • File download operasyonunda request'e gelen data ile bir stream döndürülüyor ve environment kullanılarak dosya yolu belirleniyor.
    • Dosya okunmak için file stream oluşturuluyor ve request'ten gelen nesnenin extension'ı belirlenerek dosya açılıyor.
    • Dosya indirme işlemi için en fazla 2048 byte'lık bir buffer oluşturuluyor ve dosya parça parça okunarak client'a gönderiliyor.
    40:13Client Tarafı
    • Hem download hem de upload operasyonlarını gerçekleştirmek için iki ayrı client oluşturuluyor: download client ve upload client.
    • Her iki client için de gerekli kütüphaneler yükleniyor.
    • Upload işlemi için öncelikle proto dosyası clientlara yayılması gerekiyor.
    42:06GRPC Client Projesi Oluşturma
    • Klasör kopyalanıp "server" kelimesi "client" olarak değiştirilerek yeni bir proje oluşturuluyor.
    • Proto dosyası eklenirken, bunun bir kilit dosyası olduğunu belirtmek gerekiyor.
    • .NET build komutuyla client projesinde proto dosyasının arayüzleri oluşturuluyor.
    43:16GRPC Kanalı ve Dosya Transferi
    • Program.cs dosyasında bir GRPC kanalı oluşturuluyor ve 5001 portunda sunucuya bağlanılıyor.
    • FileService client'ı kanal üzerinden çağrılıyor.
    • Transfer edilecek dosya adı belirleniyor ve System.IO kütüphanesi kullanılarak file stream referansı oluşturuluyor.
    44:41Dosya Gönderme İşlemi
    • Gönderilecek dosyanın boyutu belirleniyor ve server'a bildiriliyor.
    • Dosya bilgileri (boyut, isim) server'a gönderilmek üzere hazırlanıyor.
    • Upload işlemi, server'daki download kodlarının birebir aynısı olarak gerçekleştiriliyor.
    46:53Dosya Verisi Gönderme
    • Upload değişkeni oluşturulup, 2048 boyutunda bir buffer hazırlanıyor.
    • Dosya içeriği buffer'a okunuyor ve sıfırdan büyük olduğu sürece server'a gönderiliyor.
    • Upload request tamamlandıktan sonra file stream kapatılıyor ve IDisposable ile nesne dispose ediliyor.
    48:35Uygulamanın Test Edilmesi
    • Server ayağa kaldırılıyor ve 5001 portunda çalıştırılıyor.
    • Client ayağa kaldırılıp, bir video dosyası seçilerek transfer işlemi başlatılıyor.
    • Dosya başarıyla transfer edildiğini görebiliyoruz, ancak işlem sırasında bir hata mesajı alınıyor.
    54:01Kodlama ve Editör Sorunları
    • Eğitmen, kodlama sırasında namespace eklemesi yapamadığı için editör hatasıyla karşılaşıyor.
    • Visual Studio'da namespace'i kolayca ekleyebilirken, Visual Studio Code editörü bu işlemi yapmıyor.
    • Tüm klanlarda ilgili proto dosyalarının yüklenmiş olması gerekiyor ve projede hepsini belirtmek gerekiyor.
    56:26Download Operasyonu Hazırlığı
    • Download operasyonu için önce bir cli oluşturmak gerekiyor.
    • Download yapabilmek için bir path'e ihtiyaç var ve bu path için bir dosya oluşturulmalı.
    • Download yaparken proto dosyasında file download için file info request gönderip, white content olarak cevap alınıyor.
    58:20File Info Oluşturma
    • File info oluşturmak için extension ve file name bilgileri gerekli.
    • Dosya uzantısı belirtilirken nokta işareti eklenmesi gerekiyor.
    • Server'da file upload'da yapılanlarla aynı şekilde download için de aynı işlemler yapılmalı.
    59:42Download İşlemi Gerçekleştirme
    • Download request oluşturup, önceki adımda oluşturulan file info verilmesi gerekiyor.
    • While döngüsüyle mevzuya giriş yapılıyor ve cancellation token kullanılıyor.
    • İlk gelen datada alan tahsisinde bulunulup, sonraki datalar o alana yerleştiriliyor.
    1:02:27Kodlama Sürecindeki Sorunlar
    • Kodlama sırasında editörsel hatalarla karşılaşılarak namespace ve statik çağrılarla ilgili sorunlar yaşanıyor.
    • Visual Studio'da sorunsuz çalışan kod, Visual Studio Code'da hata veriyor.
    • Editör sorunları nedeniyle kodun kapatıp yeniden açılması gerekiyor.
    1:03:56Dosya Transferi Kodlama
    • File stream nesnesi oluşturulup, response stream yakalanarak dosya alanı tahsis ediliyor.
    • Buffer nesnesi request üzerinden response stream current buffer to white array ile elde ediliyor.
    • File stream right ssang fonksiyonuyla buffer sıfırıncıdan request response stream current redded byte okunan hane kadar yerleştiriliyor.
    1:06:01Kod Optimizasyonu
    • Yüzdelik hesaplama için server'daki kodun aynısının client tarafına da yazılması gerekiyor.
    • Chunk size bildirilmesi ve request yapılması gerekiyor.
    • Programatik çalışıp yapılanları farklı servislere bölüp destek almak mümkün, ancak konunun ana unsurundan uzaklaşmak istenmiyor.
    1:06:57Ders Anlatım Yöntemi
    • Ders anlatırken konuyu çok dallanıp budaklandırmak yerine, mümkün mertebe sade bir şekilde konuyu ele alıp diğer teknolojileri de sade ele aldıktan sonra hepsini birleştirmek daha doğru.
    • Bir şey anlatırken var olan her şeyiyle beraber anlatmak ve birleştirip aktarmak çok doğru bir yöntem olmayabilir.
    1:08:12Dosya Transferi Uygulaması
    • Server ile client arasında önce upload, sonra download işlemi yapılıyor.
    • Dosya transferi CRPC üzerinde örneklendirilmiş ve çalıştırılmış.
    • Kodlarla ilgili detaylı açıklamaların bulunduğu bir blog makalesi de mevcut.
    1:10:44Dersin Sonucu
    • CRPC sistemi üzerinde bir örnek uygulama yapılmış ve dosya transfer operasyonları gösterilmiş.
    • Dosya transferi kodları çalışmadan çalışmaya göre değişebilir ve farklı kütüphanelerle de yapılabilir.
    • GRPC üzerine gerçek bir uygulama örneği gösterilmiş olup, bundan sonraki derslerde de GRPC'e dair farklı noktalara değinilecek.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor