IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 18 Mart 2015, 14:41   #1
Çevrimiçi
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Asenkron Nedir ?




Facebook ve Twitter’ın yükselişi ile birlikte, özellikle sosyal ağlarda anlık veri akışına alışır duruma geldik. Bildirimleri veya bize gelen mesajları görüntülemek için sayfayı yenileme işlemi geçmişte kalmış eski bir anı oldu. Peki, bu altyapıyı kullanan web siteleri bu gücü nereden alıyor? İşte, bu yazıda bu teknolojinin altında yatan mantığı temel olarak inceleyeceğiz.

‘Asenkron nedir‘e geçmeden önce hala birçok sistemin arka planında çalışan standart senkron yapının ne olduğundan bahsetmek gerek. Senkron bir web sunucusu, örnek olarak "apache" verilebilir, isteği alır, işler ve bu işlemin sonucunu geri döndürür. Bu süreç esnasında sunucu bloke edilmiş durumdadır yani herhangi bir başka isteğe cevap veremez. Bu düşük trafikli bir web sitesinde herhangi bir sıkıntı çıkarmayabilir ancak yüksek stres altındaki bir sunucunun geliştirici tabiri ile patlamasına yol açar. Bu durum geliştirici topluluğu arasında C10k Problemi olarak anılmaktadır. C10k sorununu aşmak ve projemize esneklik kazandırabilmek için ve özellikle real-time işlerin üstesinden gelebilmek için asenkron sunucular ile kullanıcıları karşılamak gerekmektedir.

Asenkron sistemler, senkron sistemlerin aksine aynı anda birden fazla isteği işleyebilirler. İstek yollanır, bu istek işlenir ve bu işleme esnasında başka bir istek daha yollanırsa o istek de işlenir. Bitirilen işlemlerin sonucu ise alınma sıralarına göre değil, bitirilme sıralarına göre geri döndürülür. Asenkron bir sistem, yaptığı işlem blocking bir istek değil ise sunucuyu bloke etmez, bu durum ise non-blocking olarak adlandırılır.

Günümüzde asenkron sistemler için en çok kullanılan alternatifler; Chrome’un Javascript motoru üzerine yazılmış, event-driven olan Node.JS ve Friendfeed’in altyapısında kullanılan sistemin Facebook tarafından açık kaynak haline getirilmesi ile aramıza katılan python tabanlı bir sunucu ve framework olan Tornado’dur. Node.JS kullanan sitelere trello.com’u, Tornado kullanan sitelere ise quara.com’u örnek verebiliriz.

Asenkron çalışmanın mantığını daha iyi anlayabilmek için örnek bir Node.js kodu yazmamız iyi olacaktır. Aşağıdaki kodları inceleyelim:

Öncelikle okuyabilmek için .txt diye bir dosya oluşturup içine veri veri veri veri yazalım. Bu dosyanın yanında da node.js kodlarımızı içerecek app.js dosyamızı yaratıp içine şu kodları ekleyelim:

fs = require(’fs’);
var result = null;

fs.readFile(’.txt’, ’utf8’, function (err,data) {
result = data;
console.log("Veri okundu");
});

console.log("Okunan veri: " + result);

Bu kodun senkron yapıda düşündüğümüzde konsolda node app.js kodunu çalıştırdıktan sonra ekrana

Veri okundu
Okunan veri: veri veri veri veri

yazmasını bekleriz ancak asenkron çalışan node.js üzerinde bu böyle gerçekleşmeyecektir çünkü node.js console.log işlemini daha önce bitireceği için ilk olarak onun sonucunu döndürecek ve daha sonra dosya okuma fonksiyonundaki işlem bittiğinde çalışacak olan callback‘i işleyecektir. Sonuç şu şekilde olur:

Okunan veri: null
Veri okundu

Asenkron yapının nasıl çalıştığı anlaşıldıktan sonra yazının ikinci bölümü olan real-time işlemlerin nasıl gerçekleştirildiğine değinip yazıyı bitireceğim.

Bir web sitesi üzerinde anlık işlemler yapmanın birçok yöntemi vardır ancak temel olarak en çok HTML5’in belki de en büyük nimeti olan websocketler ve bir diğer alternatif olarak long-polling kullanılır. Bu işlemleri yapabilmek için yine asenkron bir sunucu gerekmektedir. Websocketler ws protokolü üzerinden sunucu ve istemcinin haberleştiği bir kapıdır. Javascript tarafında onopen, onmessage, onerror, onclose, send, close öntanımlı metodları kullanılır ve sunucu tarafında backend kısmında hangi teknoloji kullanılıyorsa onun üzerinde tanımlanmış büyük bir ihtimalle yine aynı isimlerle anılacak metodlarda işlenir.

Örnek bir websocket kodu yazalım. Bir index.html dosyamız ve bir de node.js kodlarımızı içerecek app.js dosyamız olsun.

index.html

<html>
<head>
<title>Websocket denemesi</title>
**********
var conn = new WebSocket(’ws://127.0.0.1:8000’);

conn.onopen = function () {
conn.send("Javascript tarafindan mesaj!");
};

conn.onmessage = function (message) {
console.log(message.data);
};

conn.onerror = function (error) {
// Bir hata çıktığında çalışacak kısım!
};
</script>
</head>
<bOdy>
Websocket Denemesi
</bOdy>
</html>

app.js

var ws = require(’websocket’).server;
var http = require(’http’);

var server = http.createServer(function (request, response) {
// HTTP isteklerini işleyecek kısım
});

server.listen(8000);

wsWrapper = new ws({
httpServer: server
});

// WebSocket server
wsWrapper.on(’request’, function (request) {
var conn = request.accept(null, request.origin);

conn.send("Node.js tarafindan mesaj!");

conn.on(’message’, function (message) {
console.log(message.utf8Data);
});

conn.on(’close’, function (conn) {
// Websocket bağlantısı kapandığında çalışacak kısım
});
});

Komut satırında node app.js yazıp, tarayıcıda index.html dosyasını çalıştırdığımızda konsolda Javascript tarafindan mesaj! yazısını, tarayıcının öğeyi denetle özelliği sayesinde konsol kısmında ise Node.js tarafindan mesaj! yazısını görüyoruz.

Son olarak Long-polling örneğini ise Tornado üzerinde verelim. Long-polling, websockete oranla anlaşılması daha zor bir konudur. Sunucuya istek yollanır ve bu bağlantı sunucu tarafından bitirilinceye kadar açık kalır. Belli aralıklar ile ajax sorgusu yapmak yerine istek bir kere yapılır ve cevap gelmesi beklenir. Bu cevap gelene kadar istek Pending durumunda kalır.

Tüm Tornado kodlarını buraya yazmak yerine, Github üzerinde bulunan kendi chat örneğini incelemek daha iyi gibi.<a href= "https://github.com/facebook/tornado/tree/master/demos/chat">Kodlar bu adreste bulunuyor.</a>

Facebook ve Twitter, her ne kadar arka planda çok çok karmaşık işlemler dönse de hala long-polling kullanmaktadır. Websocketler, deneysel çalışmaların dışında özellikle bir fallback mekanizması yaratılmamışsa çok tercih edilmemektedir çünkü tarayıcı desteği ne yazık ki internet explorer açısından son derece kısıtlıdır ve ayrıca bazı güvenlik duvarları ws protokolünü tanımadığı için engellemektedir.

Tüm bu yazılanları özetlememiz gerekirse, web tarafında asenkron sistemler birden fazla işlemi aynı anda yapabilmek, uzun süreli işlemler için geçecek süreyi kullanıcıya yansıtmamak için ortaya çıkmış bir programlama prensibidir. Anlık değişim gerektirecek işlerde bu alternatiflerin kullanılması gerekir. Websocketler, asenkron sunucuların üstünde hızlıca çalışan bir mesajlaşma protokolüdür; long-polling ise sunucu tarafından istenildiğinde bitirilecek olan sürekli açık kalacak bağlantıları sağlayabilmek için gerekli olan sorgunun adıdır. Her ikisi için de asenkron bir sunucu gerekmektedir.

__________________
SusKun ve Sessiz Mürekkep...


Kullanıcı imzalarındaki bağlantı ve resimleri görebilmek için en az 20 mesaja sahip olmanız gerekir ya da üye girişi yapmanız gerekir.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla

Etiketler
asenkron, nedir


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Konya Ziraat Bankası Nalçacı Şubesi Adresi Nedir? Telefonu Nedir? PySSyCaT İç Anadolu Bölgesi 0 09 Kasım 2014 18:40
Konya Ziraat Bankası Mevlana Şubesi Adresi Nedir? Telefonu Nedir? PySSyCaT İç Anadolu Bölgesi 0 09 Kasım 2014 18:39
Senkron Eğitim mi Asenkron Eğitim mi? Zen Kişisel Gelişim 0 11 Aralık 2012 19:17
Delegeler Asenkron Programlama Sunay C# 0 23 Nisan 2010 20:40
Delegeler Asenkron Functionlar Sunay C# 0 23 Nisan 2010 20:39