Node.js – Broadcast Komutuyla Çoklu Erişim İşlemleri

Merhaba,

Bir önceki Node.js – Websocket Nedir? Nasıl Kullanılır? başlıklı makalemde, Node.js teknolojisi çerçevesinde Websocket’in ne olduğuna ve nasıl kullanıldığına detaylıca değinmiş olduk. Bu içeriğimizde ise websocket ile oluşturulan TCP bağlantısına bağlı tüm clientlara broadcast komutuyla mesaj göndererek çoklu erişim işleminin nasıl yapılacağını inceleyeceğiz.

Öncelikle broadcast olayının ne olduğundan yola çıkalım. Broadcast; server’a bağlı olan tüm clientlar arasında bir haberleşme ağı sağlayan yahut iletişim bağı oluşturulmasını belirten özel bir adrestir. Eğer ki bir mesaj; bir client tarafından broadcast üzerinden gönderilmişse, o TCP bağlantısına bağlı olan tüm clientlara iletilecektir.

Şimdi konuyu örneklendirebilmek için aşağıdaki yapılanmayı inceleyiniz.

const http = require("http");
const socket = require("socket.io");

const server = http.createServer((request, response) => {
     response.end("...");
});

server.listen(1234, () => console.log("Yayın başladı..."));
const io = socket.listen(server);
io.on("connection", client => {
     console.log(`Client bağlandı. Client id : ${client.id}`);
     client.on("disconnect", () => console.log(`Bağlantı kesildi. Client id : ${client.id}`));
     client.on("login", data => client.emit("message", data));
});

Burada bir socket açılmakta ve server TCP bağlantısı ile dinlenmektedir. Sockete bağlanan client tarafından oluşturulan “login” olayı dinlenmekte ve tetiklenme durumunda “message” olayı yaratılmaktadır.

<html>
<head>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
     <script>
          $(() => {
               const socket = io.connect("http://localhost:1234");
               $("#btnLogin").click(() => socket.emit("login", { name: $("#txtName").val() }));
               socket.on("message", data => $("#message").append(`<li>${data.name} bağlantı sağladı.</li>`));
          });
     </script>
</head>
<body>
     <input type="text" id="txtName"> <button id="btnLogin">Giriş Yap</button><br>
     <ul id="message"> </ul>
</body>
</html>

Burada ise client sockete bağlanmakta ve jQuery eşliğinde button nesnesine tıklandığı vakit “login” isimli olay yaratılmaktadır. Akabinde clienttaki “login” olayı tetiklendiği vakit sockette yaratılan “message” olayı burada dinlenilmektedir.

Genel amaç ise text nesnesine girilen değeri alıp sunucuya parametre olarak iletmek ve bundan tüm clientların haberdar edilmesini sağlamaktır.

Mevcut çalışma neticesini aşağıdaki görselden incelersek eğer;
Node.js – Broadcast Komutuyla Çoklu Erişim İşlemleri
görüldüğü üzere servera hangi client mesaj gönderirse göndersin diğer clientlara yansımamakta, dolayısıyla çoklu erişim sağlanamamaktadır.

İşte böyle bir durumda broadcast komutu aracılığıyla servera bağlı olan tüm clientlar arasında bir haberleşme yolu sağlanacak ve bir client tarafından gönderilen mesaj diğerlerine iletilmiş olacaktır.

Peki hoca! Broadcast komutunu nereye uygulayacağız? şeklinde sorunuzu duyar gibiyim…
Bu sorunun cevabı yapmak istediklerimize yani amaca göre oldukça opsiyonellik göstermektedir. Lakin ilgili içeriğin örneklendirme senaryosunda, mesaj gönderen clientın gönderdiği parametre değerini diğer clientlarda yazdırmayı amaç edindiğimizden dolayı bu işi yapan olay broadcast komutunu kullanmak için doğru seçim olacaktır.

.
.
.
io.on("connection", client => {
     .
     .
     .
     client.on("login", data => client.broadcast.emit("message", data));
});

Evet, gördüğünüz üzere “login” neticesinde client tarafından gelen datayı tüm clientlara gönderebilmek için bir başka deyişle çoklu erişim sağlayabilmek için “client.broadcast.emit(“message”, data))” komutu uygulanmıştır. Yani clienta özel event emit edilmeden önce “broadcast” komutu çağrılarak o anda veri gönderen client haricindeki tüm clientlara bu işlemin(emit) yapılacağı bildirilmektedir. Dolayısıyla “message” eventını dinleyen tüm clientlarda aşağıdaki ekran görüntüsünde olduğu gibi gerekli bilgilendirme sağlanmış olunuyor.

Node.js – Broadcast Komutuyla Çoklu Erişim İşlemleri

Dikkat ederseniz eğer “broadcast” komutu mesaj gönderen client haricindeki tüm clientlara bildiride bulunmaktadır. Eğer o anki clienta dair bir aktivite gerçekleştirmek isteniyorsa bunu zaten “broadcast” kullanmaksızın gerçekleştirebiliyoruz.

İlgilenenlerin faydalanması dileğiyle…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 03 Ocak 2019

    […] eğer namespace’e bağlı tüm clientlara işlem yapılacaksa broadcast komutunu kullanarak bu işlemi gerçekleştirebileceğimiz gibi direkt olarak namespace’i […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*