İPUCU

Seçenekler

Socket.io ile bir chat uygulaması yapalım.

27-01-2019 15:50
#1
BufGix - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2015
Nereden:
Phobos/Space
Mesajlar:
1.023
Teşekkür (Etti):
314
Teşekkür (Aldı):
443
Konular:
74
Ticaret:
(0) %
Socket.io nedir?


Socket.IO, tarayıcı ile sunucu arasında gerçek zamanlı(real time), çift yönlü(bidirectional) ve olaya dayalı(event based) iletişimi sağlayan bir Javascript kütüphanesidir.

Bir proje oluşturup socket.io yu kullanalım. Boş bir dizinde;
Kod:
npm init
komutunu çalıştırın ve projeniz için package.json oluşturun.

Ardından gerekli kütüphaneleri yükleyelim

Kod:
npm install --save express socket.io pug socket.io-client
Scoket.io nun çalışması için illa express serverine ihtiyac yoktur Node nin kendi http serveri ile de çalışır.
Kod:
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(80);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});
ama biz uygulamamızda express kullanacağiz.

index.js dosyamızı proje dizininde oluşturduktan sonra devam edelim

index.js
Kod:
const app = require('express')();
const server = app.listen(80, () => {
    console.log("Chat server başladı");
})
const io = require("socket.io").listen(server); // socket.io yu express serverine bağladık

// Pug template engine kullancağmızı belirttik
app.set('view engine', 'pug');

app.get('/chat', (req, res) => {
    res.render('index', {
        title: "Chat!"
    })
})

//ilk eventimizi yazalım
//Client servera ilk bağlandığında "connection" eventine
//kendi socket objesini gönderir
io.on("connection", (socket) => {
    console.log("Biri bağlandı");
})
Şimdi render ettiğimiz sayfamızı hazırlayalım
/views/index.pug




Sayfamış şu şekilde görüncek



"connection" eventinin yanında her soketin bir de "disconnect" eventi vardır.
Kod:
io.on("connection", (socket) => {
    console.log("Biri bağlandı");

    socket.on("disconnect", () => {
        console.log("Biri ayrıldı");
    })
})



Socket.io istediğiniz veriyi istediğiniz şekilde gönereceğiniz kişiye atmakla sorumludur. Bunu yaparken binary dosyalarını da destekler. Şimdi kullanıcı her mesaj yazdığında mesajı servera gönderelim. Bunu yaparken Jquey kullanacağımız için sayfamıza jqueyi dahil edelim.




şimdi bu eventi yakalaycak index.js de bi event oluşturalım.

index.js
Kod:
io.on("connection", (socket) => {
    console.log("Biri bağlandı");
    socket.on('chat message', (data) => {
        console.log("Biri mesaj gönderdi: " + data);
    })

    socket.on("disconnect", () => {
        console.log("Biri ayrıldı");
    })
})



Güzel. Şimdi bu gelen mesajı bağlı tüm kullanıcılara atmamız lazım. Soclet.io da tamda işimize yarar bir fonsksyon var. io.emit().

index.js
Kod:
io.on("connection", (socket) => {
    console.log("Biri bağlandı");
    socket.on('chat message', (data) => {
        console.log("Biri mesaj gönderdi: " + data);
        //Bütün herkese bu mesajı gönderelim.
        io.emit('chat message', data);
    })

    socket.on("disconnect", () => {
        console.log("Biri ayrıldı");
    })
})

Şimdi bunu yakalayacak clientde bir fonksyonuzmuz eksik. Hemen yazalım.






Kullanıcı İmzası
~Cahile gelmez benden hayır
Konu BufGix tarafından (27-01-2019 15:55 Saat 15:55 ) değiştirilmiştir.

27-01-2019 16:05
#2
Üyelik tarihi:
01/2019
Nereden:
Ötüken
Yaş:
16
Mesajlar:
277
Teşekkür (Etti):
53
Teşekkür (Aldı):
47
Konular:
26
Ticaret:
(0) %
Elinize sağlık hocam adamsınız işime yarayacak
27-01-2019 16:07
#3
ByQueny - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
12/2018
Nereden:
Bilinmiyor
Mesajlar:
632
Teşekkür (Etti):
17
Teşekkür (Aldı):
65
Konular:
16
Ticaret:
(0) %
eline emeğine sağlık hocam bunun gibi chat programını visual basic ile yapabiliriz dimi öyle biliyorumda
Kullanıcı İmzası
Ben Yapmaya Cesaret Edemediğin Herşeyin Vücut Bulmuş Haliyim .

Cyber Security & Defacer
27-01-2019 16:10
#4
s4bb4H - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
12/2018
Nereden:
loneliness
Mesajlar:
119
Teşekkür (Etti):
14
Teşekkür (Aldı):
18
Konular:
13
Ticaret:
(0) %
gene harikasın eline sağlık
27-01-2019 16:10
#5
Heaven - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
01/2016
Mesajlar:
1.271
Teşekkür (Etti):
132
Teşekkür (Aldı):
257
Konular:
53
Ticaret:
(0) %
Elinize sağlık komutanım, işime yarar.
27-01-2019 16:14
#6
thesunv1 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
12/2018
Nereden:
Turkey
Mesajlar:
226
Teşekkür (Etti):
25
Teşekkür (Aldı):
35
Konular:
25
Ticaret:
(0) %
Eline sağlık komutanım yararlı konu
Kullanıcı İmzası
Ne Mutlu Türküm diyene
27-01-2019 16:14
#7
SURHANLI - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2018
Nereden:
Frankfurt
Yaş:
19
Mesajlar:
661
Teşekkür (Etti):
39
Teşekkür (Aldı):
145
Konular:
34
Ticaret:
(0) %
Emek Var Baya Eline Sağlık.
27-01-2019 16:40
#8
VaTanSevDal - ait Kullanıcı Resmi (Avatar)
Junior Pentester
Üyelik tarihi:
01/2019
Nereden:
İstanbul
Mesajlar:
443
Teşekkür (Etti):
100
Teşekkür (Aldı):
43
Konular:
32
Ticaret:
(0) %
Elinize sağlık güzel çalışma olmuş
Kullanıcı İmzası
Emekli Defacer
27-01-2019 16:42
#9
Roothaning - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2019
Mesajlar:
372
Teşekkür (Etti):
1
Teşekkür (Aldı):
59
Konular:
19
Ticaret:
(0) %
Bu işler termuxdan oluyor değil mi?
Kullanıcı İmzası
Sakın Tıklama Bak Uyarıyorum.
Ücretsiz instagram timepost isteyen dm atabilir.
Konu Roothaning tarafından (27-01-2019 16:45 Saat 16:45 ) değiştirilmiştir.
27-01-2019 16:47
#10
BufGix - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2015
Nereden:
Phobos/Space
Mesajlar:
1.023
Teşekkür (Etti):
314
Teşekkür (Aldı):
443
Konular:
74
Ticaret:
(0) %
Alıntı:
Roothaning´isimli üyeden Alıntı Mesajı göster
Bu işler termuxdan oluyor değil mi?
Biraz zorlar ama olur. Sonuçta gerekenler sadece node ve npm
Kullanıcı İmzası
~Cahile gelmez benden hayır

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

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