Menü Kapat

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.
var appPort = 3000;
var express = require('express'), app = express();
var http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);
var jade = require('jade');
var pseudoArray = ['admin'];
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set("view options", { layout: false });
app.use(express.static(__dirname + '/public'));
view raw
chat1.js
hosted with ❤ by GitHub

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.

app.get('/', function(req, res){
res.render('home.jade');
});
server.listen(appPort);
console.log(appPort + " portu dinleniyor");
view raw
chat2.js
hosted with ❤ by GitHub

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.

io.sockets.on('connection', function (socket) {
users += 1;
reloadUsers();
socket.on('message', function (data) {
if(pseudoSet(socket))
{
var transmit = {date : new Date().toISOString(), pseudo : socket.nickname, message : data};
socket.broadcast.emit('message', transmit);
console.log(transmit['pseudo'] +" "+data+" yazdı");
}
});
socket.on('setPseudo', function (data) {
if (pseudoArray.indexOf(data) == 1)
{
pseudoArray.push(data);
socket.nickname = data;
socket.emit('pseudoStatus', 'ok');
console.log(data + " Bağlandı");
}
else
{
socket.emit('pseudoStatus', 'error')
}
});
socket.on('disconnect', function () {
users -= 1;
reloadUsers();
if (pseudoSet(socket))
{
console.log("bağlantı kapandı");
var pseudo;
pseudo = socket.nickname;
var index = pseudoArray.indexOf(pseudo);
pseudo.slice(index 1, 1);
}
});
});
view raw
chat3.js
hosted with ❤ by GitHub

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.

var messageContainer, submitButton;
var pseudo = "";
$(function() {
messageContainer = $('#messageInput');
submitButton = $("#submit");
bindButton();
window.setInterval(time, 1000*10);
$("#alertPseudo").hide();
$('#modalPseudo').modal('show');
$("#pseudoSubmit").click(function() {setPseudo()});
$("#chatEntries").slimScroll({height: '600px'});
submitButton.click(function() {sentMessage();});
setHeight();
$('#messageInput').keypress(function (e) {
if (e.which == 13) {sentMessage();}});
});
view raw
chat4.js
hosted with ❤ by GitHub

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.

function addMessage(msg, pseudo, date, self) {
if(self) var classDiv = "row message self";
else var classDiv = "row message";
$("#chatEntries").append('<div class="'+classDiv+'"><p class="infos"><span class="pseudo">'+pseudo+'</span>, <time class="date" title="'+date+'">'+date+'</time></p><p>' + msg + '</p></div>');
time();
}
view raw
chat5.js
hosted with ❤ by GitHub

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…

Node.js-Sohbet

 

 

 

32

Bir yorum yazınız. Yorumlarınız bizim için değerlidir.