En basit, en zarif çözüm
Bu kadar kolay:
client.emit("your message");
Ve bu kadar.
Ama nasıl? Bana bir örnek ver
Hepimizin ihtiyacı olan şey aslında tam bir örnektir ve işte bunu takip eder. Bu, en son socket.io sürümü (2.0.3) ile test edilmiştir ve ayrıca modern Javascript'i kullanmaktadır (şimdiye kadar hepimiz kullanmalıyız).
Örnek iki bölümden oluşmaktadır: bir sunucu ve bir istemci. İstemci her bağlandığında, sunucudan periyodik bir sıra numarası almaya başlar. Her yeni istemci için yeni bir dizi başlatılır, bu nedenle sunucunun bunları tek tek izlemesi gerekir. "Belirli bir müşteriye mesaj göndermem gerekiyor" işte burada devreye giriyor. Kodun anlaşılması çok basittir. Hadi onu görelim.
Sunucu
server.js
const
io = require("socket.io"),
server = io.listen(8000);
let
sequenceNumberByClient = new Map();
// event fired every time a new client connects:
server.on("connection", (socket) => {
console.info(`Client connected [id=${socket.id}]`);
// initialize this client's sequence number
sequenceNumberByClient.set(socket, 1);
// when socket disconnects, remove it from the list:
socket.on("disconnect", () => {
sequenceNumberByClient.delete(socket);
console.info(`Client gone [id=${socket.id}]`);
});
});
// sends each client its current sequence number
setInterval(() => {
for (const [client, sequenceNumber] of sequenceNumberByClient.entries()) {
client.emit("seq-num", sequenceNumber);
sequenceNumberByClient.set(client, sequenceNumber + 1);
}
}, 1000);
Sunucu, gelen bağlantılar için 8000 numaralı bağlantı noktasını dinlemeye başlar. Birisi geldiğinde, sıra numarasını takip edebilmesi için yeni istemciyi haritaya ekler. Ayrıca, söz konusu istemcinin disconnect
etkinliğini haritadan kaldırdığında da dinler .
Her saniye, bir zamanlayıcı tetiklenir. Bunu yaptığında, sunucu harita üzerinde dolaşır ve her istemciye geçerli sıra numarasıyla bir mesaj gönderir. Daha sonra onu artırır ve numarayı tekrar haritaya kaydeder. Hepsi bu kadar. Tereyağından kıl çeker gibi.
müşteri
Müşteri kısmı daha da basittir. Sadece sunucuya bağlanır ve seq-num
mesajı her dinlediğinde konsola yazdırarak dinler .
client.js
const
io = require("socket.io-client"),
ioClient = io.connect("http://localhost:8000");
ioClient.on("seq-num", (msg) => console.info(msg));
Örneği çalıştırma
Gerekli kitaplıkları yükleyin:
npm install socket.io
npm install socket.io-client
Sunucuyu çalıştırın:
node server
Diğer terminal pencerelerini açın ve çalıştırarak istediğiniz sayıda istemci oluşturun:
node client
Ayrıca burada tam kod ile bir öz hazırladım .