Merhaba,

Apache örneğinden gideceğim. HTTP protokolü ile konuşan Apache veya sıradan blocking bir HTTP sunucu, ona istek gönderen kullanıcıya isteğinin yanıtını gönderir ve bağlantıyı kapatır. İstemci HTTP sürüm bilgisini, bağlanacağı host'u ve yerine göre GET ve POST metoduyla yolu ve parametreyi verir. Sunucu da buna yanıt olarak belli durum kodları, parametreler verir ve bağlantıyı kapatır. Tüm bu işlemler gerçekleştirilirken sunucu, istemci için bir soket oluşturur ve istemciye has işlemler o istemci için o soketten gerçekleştirilir. İstemci de 80 portuna yaptığı istekten dönen yanıtları, üzerindeki işletim sisteminin bu istekleri yapan yazılıma ayırdığı soketten/porttan alır ve işler. (Örneğin Firefox ile btsoru.com:80 adresine istek göndeririz ve yanıtlar Firefox için örneğin 5091 portuna gelir. Bu port her tarayıcıyı yeni açtığımızda değişir ve işletim sistemi tarafından değiştirilir.)

Soruma geleyim. Zaten siz de yukarıda açıkladığım döngüde nerelerde eksik olduğumu fark edip bana yanıt vereceksinizdir.

-Sunucu, istemci örneğin web tarayıcısını kapattığında onun hattan düştüğünü/offline olduğunu/oturumu kapattığını nasıl algılar? HTTP için zaten bağlantı sunucunun gönderdiği yanıttan sonra kapatılıyordu. O halde istemci hattan düştüğünde sunucuya giden sorgu/yanıt nedir? Yoksa sunucu, istemciye ayırdığı sokete belli bir süre yanıt gelmeyince mi istemcinin hattan düştüğünü anlar? Öyleyse bu FTP sunucusunun çalışma şekline benzemiyor mu? Yoksa aslında sunucu, istemciye ayırdığı soketi mi dinliyor?

Açıklamalarımdan yol bulup yanıt veremeyecek olursanız, doğrudan başlıkta sorduğum kısa soruya da yanıt verip beni doğruya yönlendirebilirsiniz arkadaşlar.

Teşekkürlerimi sunarım.

soruldu: 20 Tem '12, 19:43

murtaza's gravatar image

murtaza
981122535
cevap kabul oranı: 29%

değiştirildi: 07 Ağu '13, 09:27

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

HTTP bağlantıları her istekte kapanıp açılır. Sitenin tarayıcıdan kapatıldığını anlayamazsınız. Ya oturum süresinin bitmesini beklersiniz, ya da yullanıcı tarafından üretilen bir sinyale (örn oturumu kapat düğmesi) ihtiyacınız var. Bazı tarayıcılar tarayıcı ya da sayfa kapanmadan ajax çalıştırabiliyor, fakat çok güvenilir bir yöntem değil.

(30 May '13, 00:36) nurettin nurettin's gravatar image

oturum açan kişinin gidip gitmediği bir web uygulaması için önemli değildirki. web uygulaması için önemli olan session'dır. session timeout'a düşmemişse ilgili kullanıcının isteklerini yerine getirir, timeouta düşmüşse yeni session oluşturur ve bu döngü böyle devam eder. eğer sen stream serverlardan bahsediyorsan o iş bambaşka bir boyut. gerek oyun gerek dosya paylaşımı gibi sürekli bir veri akışı olan serverlar için soruyorsan konuyla ilgili çeşitli kaynaklar var tabiki

(30 May '13, 05:04) kodmanyagha kodmanyagha's gravatar image

Merhaba, olayi okadar detayli, ve aslinda biraz portlarla falan karisik anlatmissin ki, belki de cevap vermek isteyen arkadaslar bu bakimdan kendilerine güvenmemis olabilirler(Aslina bakarsan, bende oturup biraz düsündüm, acaba dogrumu anliyorum, yoksa bu konu beni asiyormu diye).

Soruna cevap olarak sunu söyleyebilirim; Bir web sunucu, o anda ilk Istegi gönderip, bir oturam acan kullanicinin, hattan düsüp düsmedigiyle pek de ilgilenmez. Ilgilenmesine gerek de yoktur zaten. Önemli lan, ona ayni kullanici tekrar bir istek gönderdiginde, onu tanimasidir. Onu tanir, ve önceden bu kullanicinin actigi oturuma yönlendirir. Bunuda sanirim o servere istek gönderen Browser'in instance dan anliyor. Pratikte, ben ayni Server a, FireFox dan bir istek gönderip, kullanici adi, Sifre verip, oturum acarsam, ayni Server a bu Browser Instance dan gönderdigim her Request de beni taniyor. Beni bu browser in yeni bir Instance sini baslatirsam(yeni bir FireFox acarsam), yada baska bir Browser i (Chrome örnegin) acarsam, benden yine kullanici adi sifre istiyor. Yani beni tanimiyor. Eger su anda calistigim FireFox da yeni bri Tab acarsam beni yine taniyor.

Yani sonuc olarak, Server in umrunda degil, ben su anda online miyim yoksa degilmiyim. Eger belirlenen zaman icinde olusturdugum oturuma bir ersimde bulunmazsam o kapatiliyor. Yoksa, ben FireFox u kapattigimda, Server a herhangi bir bilgi gönderilmiyor. En azindan benim bilgim bu yönde.

Oturum bilgileri genelde Server da, ama bunun yanidan Coockie lerle Client de de tutulabilir.

permanent link

cevaplandı: 23 Tem '12, 03:25

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

değiştirildi: 23 Tem '12, 03:32

hocam bildiğim kadarıyla established(bağlı) konumunda iken örneğin sizinde dediğini gibi firefox tan 7865 portundan çıkan bi request server da 80 ile karsılanır ve oradada 7865 e aktarılır böylece bağlantı kurulmuş olur bu asamada server tarafı dinlemede kalır eger browser kapatılırsa server da bir exception fırlatılır adını tamhatırlamıyorum ama heralde Socket closed benzeri bişey bu durumda server o portu dinlemiy bırakır ve port tekrar serbest kalır

permanent link

cevaplandı: 10 Nis '13, 02:32

trueLife's gravatar image

trueLife
699182430
cevap kabul oranı: 10%

http protokolü sürekli bağlantı gerektirmez. Netstatte gördüğünüz rakamlar http protokolünü temsil etmiyor. "Listening" durumu "connected" durumuyla aynı şey değil. Web uygulamaları gelen kişiyi ip, tarayıcı, cookie gibi özelliklerinden tanıyarak hafızada ya da veritabanında tuttukları oturum bilgisiyle eşleştirir. Websoketten bahsetseydik dediğiniz olabilirdi.

(30 May '13, 00:31) nurettin nurettin's gravatar image

Merhaba, Apache tarafında tarayıcıyının kapatılmasıyla ilgili hiç bir haberleşme yoktur. Dediğiniz gibide karşı tarafa yani istemciye html (yada dosya) bilgileri gönderildikten sonra soket kapatılır. Yorumlarda bahsedilen kişiyi tanımlama ise tamamen tarayıcıların özelliği olan cookie ile mümkündür. Kod tarafında yazılmasa bile tarayıcı kendi oluşturmuş olduğu cookieleri gönderir ve server tarafının ayırt edilmesini sağlar.

Örneğin kod tarafında session oluşturduğunuzda apache random bir id oluşturur tarayıcıya bu idyi cookie olarak gönderir ve ip adresiniz ile ilişkilendirilir.(Server tarafında) Bir timeout vererek de beklemeye başlar. Belirtilen süre içerisinde yeni istek gelmezse bilgiler(session) silinir.

Örnek bu sayfanın request headeri : Cookie:csrftoken=9a2770527b4b77901466db7a128ee35b; sessionid=7cbb81a7c5b5a9933904f314d1c14b6c; utma=79366471.1070682758.1369703058.1369772988.1369861139.3; utmb=79366471.16.10.1369861139; utmc=79366471; utmz=79366471.1369703058.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=

permanent link

cevaplandı: 29 May '13, 15:51

WurucU's gravatar image

WurucU
1222
cevap kabul oranı: 0%

Ajax Heartbeat isminde bir tasarım deseni var. Bunun yardımıyla, kullanıcıya ait durumlar sorgulanabiliyor. Veyahut ( iyi bir teknik değil ) ajax bazlı bir javascript yardımıyla, kullanıcının durumunu devamlı sunucuya push edebilirsin. Böylelikle durumundan haberdar olmuş olursun.

window.setInterval(function() {
   $.ajax({
      url: "SUNUCU_ADRESI/updatestatus/userid/10235",
      success: function(data) {
         // geri dönen değerle ne yapmak istiyorsan onu yap yada boş bırak
      }
   });
}, 1000);

Yukarıda, her 10 saniyede, sunucumuzdaki bir fonksiyona kullanıcının ID' ni gönderiyoruz, böylelikle sunucu tarafında gelen ID' ye göre ne yapmak istiyorsan onu yaparsın, örneğin session' u güncellersin.

permanent link

cevaplandı: 01 Haz '13, 13:17

O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Oğuz Çelikdemir
2.0k52234
cevap kabul oranı: 13%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×10
×8

Soruldu: 20 Tem '12, 19:43

Görüntüleme: 1,199 kez

Son güncelleme: 07 Ağu '13, 09:27

powered by BitNami OSQA