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

BufGix

Uzman üye
7 Ağu 2015
1,089
2
Phobos/Space
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:
[FONT="Courier New"]npm init[/FONT]
komutunu çalıştırın ve projeniz için package.json oluşturun.

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

Kod:
[FONT="Courier New"]npm install --save express socket.io pug socket.io-client[/FONT]

Scoket.io nun çalışması için illa express serverine ihtiyac yoktur Node nin kendi http serveri ile de çalışır.
Kod:
[font=monospace][color=#008000][b]var[/b][/color] app [color=#666666]=[/color] require([color=#BA2121]'http'[/color]).createServer(handler)
[color=#008000][b]var[/b][/color] io [color=#666666]=[/color] require([color=#BA2121]'socket.io'[/color])(app);
[color=#008000][b]var[/b][/color] fs [color=#666666]=[/color] require([color=#BA2121]'fs'[/color]);

app.listen([color=#666666]80[/color]);

[color=#008000][b]function[/b][/color] handler (req, res) {
  fs.readFile(__dirname [color=#666666]+[/color] [color=#BA2121]'/index.html'[/color],
  [color=#008000][b]function[/b][/color] (err, data) {
    [color=#008000][b]if[/b][/color] (err) {
      res.writeHead([color=#666666]500[/color]);
      [color=#008000][b]return[/b][/color] res.end([color=#BA2121]'Error loading index.html'[/color]);
    }

    res.writeHead([color=#666666]200[/color]);
    res.end(data);
  });
}

io.on([color=#BA2121]'connection'[/color], [color=#008000][b]function[/b][/color] (socket) {
  socket.emit([color=#BA2121]'news'[/color], { hello[color=#666666]:[/color] [color=#BA2121]'world'[/color] });
  socket.on([color=#BA2121]'my other event'[/color], [color=#008000][b]function[/b][/color] (data) {
    console.log(data);
  });
});
[/font]

ama biz uygulamamızda express kullanacağiz.

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

index.js
Kod:
[font=monospace][color=#008000][b]const[/b][/color] app [color=#666666]=[/color] require([color=#BA2121]'express'[/color])();
[color=#008000][b]const[/b][/color] server [color=#666666]=[/color] app.listen([color=#666666]80[/color], () => {
    console.log([color=#BA2121]"Chat server başladı"[/color]);
})
[color=#008000][b]const[/b][/color] io [color=#666666]=[/color] require([color=#BA2121]"socket.io"[/color]).listen(server); [color=#408080][i]// socket.io yu express serverine bağladık
[/i][/color]
[color=#408080][i]// Pug template engine kullancağmızı belirttik
[/i][/color]app.set([color=#BA2121]'view engine'[/color], [color=#BA2121]'pug'[/color]);

app.get([color=#BA2121]'/chat'[/color], (req, res) => {
    res.render([color=#BA2121]'index'[/color], {
        title[color=#666666]:[/color] [color=#BA2121]"Chat!"[/color]
    })
})

[color=#408080][i]//ilk eventimizi yazalım
//Client servera ilk bağlandığında "connection" eventine
//kendi socket objesini gönderir
[/i][/color]io.on([color=#BA2121]"connection"[/color], (socket) => {
    console.log([color=#BA2121]"Biri bağlandı"[/color]);
})
[/font]

Ş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:
[font=monospace]io.on([color=#BA2121]"connection"[/color], (socket) => {
    console.log([color=#BA2121]"Biri bağlandı"[/color]);

    socket.on([color=#BA2121]"disconnect"[/color], () => {
        console.log([color=#BA2121]"Biri ayrıldı"[/color]);
    })
})
[/font]




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:
[font=monospace]io.on([color=#BA2121]"connection"[/color], (socket) => {
    console.log([color=#BA2121]"Biri bağlandı"[/color]);
    socket.on([color=#BA2121]'chat message'[/color], (data) => {
        console.log([color=#BA2121]"Biri mesaj gönderdi: "[/color] [color=#666666]+[/color] data);
    })

    socket.on([color=#BA2121]"disconnect"[/color], () => {
        console.log([color=#BA2121]"Biri ayrıldı"[/color]);
    })
})
[/font]




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:
[font=monospace]io.on([color=#BA2121]"connection"[/color], (socket) => {
    console.log([color=#BA2121]"Biri bağlandı"[/color]);
    socket.on([color=#BA2121]'chat message'[/color], (data) => {
        console.log([color=#BA2121]"Biri mesaj gönderdi: "[/color] [color=#666666]+[/color] data);
        [color=#408080][i]//Bütün herkese bu mesajı gönderelim.
[/i][/color]        io.emit([color=#BA2121]'chat message'[/color], data);
    })

    socket.on([color=#BA2121]"disconnect"[/color], () => {
        console.log([color=#BA2121]"Biri ayrıldı"[/color]);
    })
})
[/font]


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






 
Son düzenleme:

ByQueny

Uzman üye
8 Ara 2018
1,281
1
www
eline emeğine sağlık hocam bunun gibi chat programını visual basic ile yapabiliriz dimi öyle biliyorumda
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.