İstemci Sunucu Kavramı ve Örnek Tasarımlar
Soket programlama IPC (interprocess communication) mimarisinde sıklıkla tercih edilen metotlardandır. Pek çok uygulama bu kavramı kullanmaktadır. En basitinden internet üzerinden oynanan bir tavla uygulaması soket programlama kullanılarak yapılabilir.
Soket programlama için temel iki kavram olan istemci ve sunucuyu açıklayalım. İstemciden çok sayıda olabilir. Sunucudan bir tane olacaktır. Aslında bu iki kavram benzetmeyle daha kolay anlaşılabilir. Sunucuyu bakkal dükkanı gibi düşünebiliriz. İstemciyi ise müşteriler. İkinci önemli mevzu ise bir iletişimi istemci başlatır, yani sunucu bekler istemci sunucuya gider. Bir programı tasarlarken iki bu kısıt dışında üst seviyede istemci ile sunucuyu ayıran başka birşey yoktur. Şimdi program örnekleriyle en sık bilinenden daha karmaşığa doğru farklı tasarımları açıklayalım.
1. Basit bir HTTP Sunucu:
HTTP sunucu nedir, bir web sayfasını size sunan uygulamadır. Örneğin google.com bir web sunucu üzerinden size sunucu olarak hizmet vermektedir. Yani bakkal dükkanıdır. İstemci ise chrome, firefox veya internet explorer’dır. Evet bu iki kısıta bakalım. Sunucudan 1 tane var (google.com), istemciden çok var (hepimiz). İkinci kısıt ise olayı kim başlatıyor? Biz yani istemci başlatıyor. Dolayısıyla bu tasarım en temel tasarımdır.
2. Tavla uygulaması:
Sunucu tavla uygulamasıdır ve 1 tanedir. Kendi içinde masalar vb. işler için farklı veri yapıları ile bu bilgiyi tutabilir. Neticede 1 tanedir. İstemciler ise oyunculardır. Hangi masaya oturacaklarsa o masaya katılım yaparlar yani birden fazla olabilir ve olayı istemciler başlatıyor. Bu tasarım da standart bir tasarımdır.
3. Web tabanlı ancak web soket kullanmadan yapılan bir sohbet uygulaması:
Bu uygulamada browser’lar istemcidir, kullanıcıların kullandığı internet sayfası ise sunucudur. Bu uygulamada kullanıcılar birbirine şöyle bir akışla mesaj gönderirler:
a) İstemci tarafı: kullanıcı metin kutusunu doldurur, gönder tuşuna basar.
b) Sunucu tarafı: sunucu mesajı alır kime gönderildiğine bakar ve ilgili kullanıcıya gönderir. Tabiki hayır. Sunucu bir bağlantı başlatamazdı hatırlayacak olursanız. Peki istemci kendisine bir mesaj gelince nasıl bu mesajı okuyacak? Tabiki ilgili sunucuya düzenli olarak kendisi (istemci olduğundan) bağlantı açarak bu durumu soracaktır.
c) İstemci web sunucusunı düzenli olarak (örneğin 10 saniyede bir) sorgulayarak yeni bir mesaj olup olmadığını kontrol eder varsa bu mesaj sayfada görüntülenir.
Bu durum tahmin edileceği gibi hiç etkin değildir. Ancak istemci-sunucu yapısı bize böyle bir çözümü tercih edersek bunu yapmamızı zorluyor. Çünkü bir tane olacak olan şey yani sunucu, bağlantı başlatamıyor.
4. Bankacılık uygulaması:
Gelelim biraz daha karmaşık tasarımlara. Bankasınız ve kullanıcılara SMS ile değil de android veya IOS uygulamasını kullandırarak internet sayfanızda giriş yaptırmak istiyorsunuz (maddi sebeplerden dolayı, SMS bedavadan daha pahalıdır). Bu işi istemci-sunucu ile tasarlayalım. Bir de olayın akışını ifade edelim de tasarımdaki zorluğu ortaya koyalım. İlk olarak kullanıcı bankanın internet sayfasına müşteri numarası ve şifresini girecektir. Bu aşamada standart olan neydi? Müşterinin cep telefonuna bir SMS ile ikinci bir şifre daha gelirdi ve bu şifreyide yeni açılan sayfaya girerek internet bankacılığına erişirdik. Ancak SMS yok, cep telefonu var, cep telefonunda da internet var ve internet bankacılığı uygulaması açık. Şimdi müşterinin cep telefonundaki internet bankacılığı uygulamasına bir mesaj gelecek ve müşteri bu mesajdaki “OK” tuşuna basınca herhangi bir ek işlem yapmadan bilgisayardaki internet sayfası asıl internet sayfasını açacak. Evet karmaşık oldu biraz daha açıklayalım.
a) kullanıcının cep telefonununun interneti var ve bankanın interaktif bankacılık uygulaması yüklü ve açık durumdab) kullanıcı bilgisayardan interaktif bankacılık müşteri adı ve şifresini giriyor
c) bu girişten sonra yeni bir sayfa açılıyor ve kullanıcı bu sayfada bekletiliyor
d) kullanıcının cep telefonuna onaylaması veya red etmesi için bir mesaj geliyor.
e) onaylarsa bilgisayarda bekletildiği sayfa geçiliyor ve internet bankacılığına başarılı bir giriş yapılmış oluyor.
=> yani SMS kalktı.
Şimdi soru şu?
Banka sunucu olmalı değil mi, evet. Peki bu yapı nasıl kurulacak?
Şöyle,
banka internet sayfası = sunucu (kaçarı yok, çünkü bakkal dükkanı orası), müşterinin bilgisayarındaki browser istemci (benzer şekilde kaçarı yok)
cep telefonu uygulaması = istemci, karşısındaki uygulama sunucu (iki kısıtı hatırlayalım)
O vakit başka bir soru akla geliyor, sunucu bekleyen taraf ise müşterinin cep telefonuna “onay” veya “red” mesajını nasıl gönderiyor? (3. örnekteki durumu hatırlayalım), Cevap kendi içinde saklı, kullanıcının cep telefonundaki uygulama açılırken sunucuya istemci olarak bağlantı kuruyor. Bu durumda sunucu ile istemci arasında bir bağ kuruldu ve artık sunucu istemciye mesaj gönderebilir. Hatırlayalım ilk bağlantıyı sunucu kuramaz ama ilk bağlantıdan sonraki bütün iletişimler her iki taraf tarafından tetiklenebilir (bağlantı kapatılmadıktan sonra).
Başka bir soru, internet sayfası ile cep telefonundaki uygulama nasıl ilişkilendirildi? Cevap, internet sayfasına kullanıcı müşteri numarası ile giriş yapıyor, cep telefonundaki uygulama da müşteri numarası ile kayıt yaptırılan bir uygulama.
Dolayısıyla, akışı oynatalım.
1. Cep telefonundan uygulama açılınca sunucuyla bir istemci-sunucu bağlantısı kuruldu (istemci=cep telefonu uygulaması, sunucu=banka uygulaması).
2. İnternet sayfasına bilgisayardan giriş yapıldı. Doğru bilgiler girildiyse cep telefonu sunucu uygulamasına “onay-red” mesajı gönderilecek müşteri bilgisi geçildi (aaaa bakın bu durumda internet sayfası, cep telefonu sunucu uygulamasına istemci olarak baglanabilir, web socket mesela). Tahmin edilebileceği üzere cep telefonu sunucu uygulaması hem müşterilerden hem de banka internet sayfasından bağlantı kabul ediyor olmalı veya istemcinin ilk baglanti soketi kapatilmadan ayni soket uzerinden iletisim devam ediyor olabilir.
3. Cep telefonu sunucu uygulaması kullanıcıya mesaj gönderilir.
4. Müşteri “onay” veya “red” der ve bu mesaj cep telefonu sunucu yazılımına gelir.
5. Cep telefonu sunucu yazılımı internet sayfası istemci soketine (web soket demiştik) durumu (onay veya red) gönderir.
6. Onay ise internet sayfası gösterilir, red ise çıkış yaptırılır.
Sonuç:
Bu yazımızda istemci-sunucu mimarisine giriş yapıldı ve örnekler verildi. İfade edilen iki kısıt yazılımlarımız için temel teşkil etmektedir. Ağ (network) üzerinden çalışacak yazılımlarda mimari detaylı tasarlanmalıdır.