Node.JS Chat Uygulaması
Bu sohbet uygulamasını yapmak için projeye bazı modüller eklememiz gerekmektedir.
Peki modül nedir?
Her dilde olduğu gibi nodejs’de de farklı dosyalarda yazılmış fonksiyonlar çağırmak mümkündür. Node.js açık kaynak olduğu için birçok geliştiricisi vardır ve bu geliştiriciler özel alanlarda (örn. Socket bağlantısı , Mongodb bağlantısı, Twitter Api bağlantısı,Web Arayüz vb…) hazır fonksiyonlar, yapılar geliştirirler. İşte bu yapılar modül olarak adlandırılır. Kendimizde modül yazabiliriz fakat hazır modülleri kullanmak için nodejs için hazırlanmış paketleri yani modülleri otamatik olarak indirmeya yarayan npm(Node Package Manager) aracını kullanacağız.
Gerekli modüller:
– express
– jade
– socket.io
jade modülü html sayfaları oluşturmak için kullanılan boşluk duyarlı bir şablon dilidir.Kurulum için proje dizinini komut satırında açıp — npm install jade yazıp çalıştırmanız yeterlidir. Proje dizininde node_modules adında klasör varsa bu klasörün içine kurulum yapacaktır yoksa kendisi bu klasörü oluşturur.
express modülü nodejs ile çok daha kolay ve hızlı geliştirme yapmamıza imkan sağlayan bir web çatısıdır.(web framework) Express, html şablonlarıyla, servisimizden gelen verileri birleştirebilmemizi sağlayan javascript kütüphanesidir.Bu sayede php’de olduğu gibi html içerisine veri yollayıp bunu görüntüleyebilmemizi sağlar.Kurmak için — npm install express yazıp çalıştırmanız yeterli olacaktır.
socket.io sunucu ve istemci arasında anlık iletişimi sağlayan, çok farklı protokollerle, kullanımı kolay bir kütüphanedir.socket.io sunucu ve istemciyi yormaz, gecikme oranı düşüktür ve performans oranı yüksektir.Sunucu çalışmak için istemciden mesaj gelmesini bekler.İstemci sadece bir istekte bulunacağı zaman sunucuyla iletişime geçer ve sunucu bu isteğe hızlı bir şekilde cevap verir isteği bekletmez. Bütün istekler tek bir socket bağlantısı üzerinden alınır ve cevaplanır. Farklı istemcilerden gelen istekler için yeni bağlantılar açılmaz. Kurulum için — npm install socket.io yazıp çalıştırmanız yeterli olacaktır.
Bu paketleri kurduktan sonra uygulama için yapmamız gerekenlerden bahsedelim.
- istemciden gelen istekleri tutmak ve yayınlamak için sunucu oluşturacağız
- giriş yapan kullanıcıların nickname lerini tutmamız gerek aynı isimde iki kullanıcı olmaması için
- kullanıcıların mesajlarını birbirlerine göstermek için view kısmı tasarlayacağız.
https://gist.github.com/artist27/635f4df0edec87b8da3147800c3ad5c5
server.js dosyasında yapacağımız ilk işlem yayın yapacağımız portu belirtiyoruz. Siz farklı bir port kullanabilirsiniz. Daha sonra modüllerimizi ekliyoruz.
server = http.createServer(app) komutu ile sunucumuzu oluşturuyoruz.
app.set() komutu ile jade modülü ile tasarladığımız view sayfasının bilgilerini uygulamaya aktarıyoruz.
app.use() komutu ile style dosyalarımızın konumunu uygalamaya aktarıyoruz.
https://gist.github.com/artist27/d8f024b44bc37ca2ce4f96860ef844eb
app.get(‘/’, function(req, res){
res.render(‘home.jade’);
});
Burada komutta ‘/’ demekle tarayıcada adres çubuğuna http://localhost:3000/ yazıldığında home sayfasını açmasını söylüyoruz.
server.listen() komutu sunucuya gelen istekleri takip eder.
https://gist.github.com/artist27/40c5d89e7647aabf057ee0983462b406
io.sockets.on(‘connection’, function (socket) {}) komutu sunucuya bir bağlantı olursa yapılması gerekenleri belirttiğimiz kısım.
Şimdi de giriş isteği geldiğinde ve giriş yapıldıkdan sonra yapılması gerekenleri belirttiğimiz kodları görelim.
https://gist.github.com/artist27/52ac28e3a585c94df01157716cc892a3
Burda ilk yazılan fonksiyon mesaj yazdığımız kısımla alakalı. Diyoruz ki eğer mesaj yazılmadıysa gönder butonu pasif olsun yani tıklanmasın bir mesaj yazdığımızda da butonun click özelliğini aktif et ve tıklanırsa yazılan mesaj içeriğini sunucuya gönder.
https://gist.github.com/artist27/9c92283fd62a90dd8ebe4ead2a5dc44b
addMessage() fonksiyonuda sunucuya gelen mesajları tüm kullanıcıların görmesi için gönderen kullanıcının ismi ve gönderim saatiyle beraber ekrana yazan fonksiyon. Uygulanın önemli kısımları yani bilinmesi gereken kısımları mesaj bilgilerinin sunucuya gönderilmesi ve bu mesajların tekrardan alınması.
Proje kaynak kodlarına aşağıdaki bağlantıdan ulaşabilirsiniz…