Node.js ve Socket.io ile Gerçek Zamanlı Uygulamalar

 bcakir
 26 Ocak 2014

Günümüzde gerçek zamanlı uygulamalara (real-time applications) artık her yerde rastlamaktayız. Örnek, Facebook ve Twitter haber akışı, Olark ve Zopim gibi müşteri ile satıcı arasında konuşmayı sağlayan sohbet (chat) uygulaması ya da gerçek zamanlı konumumuzu bularak bizlere gideceğimiz yolu gösteren navigasyon uygulamaları gibi. Gerçek zamanlı uygulamaları, klasik programlama yöntemleriyle yapmamız çok fazla sunucu tüketimine neden olmaktaydı. Klasik yöntem olarak commet programlamanın long polling tekniği en optimize olarak bilineni ve kullanılanı. Fakat bu yöntemler ölçeklenebilirlik konusunda sıkıntıya neden oluyor, çünkü sürekli olarak server yük altında kaldığı için ödeyeceğimiz maliyetler kat be kat artıyor. Sorunun çözümü ise asenkron (asynchronous) ile socket programla kullanımından geçiyor (Bunlara ilave, RabbitMQ tarzı iş akışı kuyruklama sistemi de eklenebilir).

Asenkron (multithread), yapılması gereken bir iş parçacığının (thread) sonucunu beklemeden, diğer işlemleri de onla birlikte yapmasını sağlayan programlama modelidir. Örneğin, restoranda bulunanlardan sadece 1 masa ile değil hepsiyle ilgilenip, siparişleri toplayıp, birini hazırlarken bir diğerini ocakta pişirmek ve yemeği hazırlananın yemeğini masasına götürmek gibi. Asenkron programla için Google tarafından Chrome için C/C++ ile geliştirilen V8 Javascipt motorunun üzerine inşa edilmiş, bir JavaScript derleyicisi olan Node.js kullanacağız. Avantajları; Google tarafından desteklenmesi, çok hızlı işlem yapmaya olanak sağlaması, hızlı ve kolay geliştirmeye elverişli olması, çokça bulunan modülleri (module) ve ölçeklenebilirliğe elverişli olması olarak sıralanabilir. Dezavantajları ise; henüz yeni bir teknoloji olması ve klasik web barındırma (hosting) servislerinin destek vermemesidir (uygulamanızı internette yayınlamak için VPS satın alabilirsiniz).

Socket, aynı ya da farklı bilgisayarlardaki iki farklı işlemin haberleşmesini Unix dosya tanımlayıcıları (file descriptor) kullanarak sağlayan yapıdır. Örneğin, çoklu oyunculu bir oyunda (multiplayer games), bilgisayarların haberleşmesinin sağlandığı katmandır. Sunucuda canlı (live) olarak yani kesintisiz çalıştıkları için yayınlandıkları porttan dinlenerek gerekli etkileşim sağlanır. Ayrıca, her türlü internet üzerinden yayın yapan program, soket program mantığında çalışmaktadır. Örneğin, web programları (http) 80. ve SSH programları ise 22. port üzerinden servis veren soket programlardır. Web socket ise, 1 tcp ip soketi üzerinden çift yönlü iletişim kanalı açmasını tanımlayan protokoldür. Web socket programlama için JavaScript için yazılmış Socket.io tercih edeceğiz. Web socket, Html5 standartlarında yer aldığı için, eski sürümlü tarayıcılar tarafından desteklenmez.

Bundan sonra Facebook tarzı haber akışı (news feed), gerçek zamanlı web sohbet (chat) programları gibi örnekler yapacağız. Ben Node.js kurulumunu ve temel derslerini anlatmayacağım. Temel konular için baya Türkçe kaynak bulunmakta fakat ileri seviye veya yapılan bir uygulamada kurulması gereken bir mantık için sadece İngilizce olarak araştırma yapıldığında (Stackoverflow) sonuç bulunabiliyor. Bundan dolayı araştırarak edindiğim bilgileri sizlerle paylaşacağım.

Node.js kurulumunu anlatan makaleye buradan ve videolu kuruluma ise buradan ulaşabilirsiniz. Socket.io modülünü, Node.js paket yöneticisi (npm) yardımıyla kolayca entegre edebilirsiniz. Gerçek zamanlı web uygulamalarına ilgiliyseniz, yapacağım paylaşımları okumak için Node.js kategorisini takipte kalın.

 3.110 Okunma

Bu yazıya 4 yorum yapılmış.

  1. Node.js kategorisini takipteyim, bekliyoruz uygulamaları. Ben en çok haber akışı örneğini istiyorum, chat yapımının örneği çok. Söylemeden geçmeyim dedim, Türkiye’de node.js gerektiği önemi hala göremiyor. Okuduğum kadarıyla Amerika Silikon Vadisinde çok revaçtaymış.

  2. Merhaba, çok değerli bilgiler paylaşmışsınız yazılım dünyasına yeni atılan birisi olarak bu alanlarda Türkçe kaynak bulmak mutluluk verici.

  3. Güzel giriş yazısı, bu hafta ilk uygulama örneğinin gelmesini bekliyorum.

  4. Javascript ile geliştirme yapıyor olmamamız bence büyük kolaylık. Yeni bir dil falan öğrenmeye gerek kalmamamız süper.

Yazı hakkında görüşlerinizi belirtmek istermisiniz?