socket.emit () ile socket.send () karşılaştırması


133

Bu ikisi arasındaki fark nedir?

Ben değişti eğer fark socket.emitetmeksocket.send bir çalışma programına nedenini anlamıyorum rağmen, sunucu, iletisi başarısız oldu.

Ben de programda ben değiştirildi eğer fark socket.emitetmek socket.send, sunucu bir mesaj aldığında, ancak bunu birkaç kez alıyorum gibi görünüyor. console.log()Sunucunun ne aldığını görmek için kullandığımda , kullandığım zamankinden farklı bir şey gösteriyorsocket.emit .

Neden bu davranış? Nasıl ne zaman kullanılacağını biliyor musunuz socket.emitya socket.send?

Yanıtlar:


123

Socket.emit ile şu şekilde özel etkinlik kaydedebilirsiniz:

sunucu:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

müşteri:

var socket = io.connect('http://localhost');
socket.on('news', function (data) {
  console.log(data);
  socket.emit('my other event', { my: 'data' });
});

Socket.send aynı şeyi yapar, ancak "haberler" e değil mesaj göndermek için kaydolursunuz:

sunucu:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.send('hi');
});

müşteri:

var socket = io.connect('http://localhost');
socket.on('message', function (message) {
  console.log(message);
});

3
Çok büyük bir fark gibi görünmüyor. Socket.emit () işlevinin socket.on () tarafından yapabileceği her şeyi yapabileceğini görür. Neden bu işlevi yerine getirmek zorunda kaldılar?
node ninja

2
Bilmiyorum, kaynak kodunu kontrol ettim ve neredeyse aynı şeyi yapıyorlar ( github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L318 ). Belki tarihseldir ve sadece geriye dönük uyumluluk içindir.
Charles

37
Ayrıca, bu yazının gelecekteki okuyucuları, bunun node.js TCP, UDP veya Unix soketleriyle değil soket.io ile ilgili olduğunu unutmayın.
aredridel

3
Vanilya javascript Websockets ile yaymak mümkün mü?
Alex Buznik

11
Görünüşe göre socket.sendsadece bir takma adsocket.emit('message', message);
Mohit Gangrade

92

Basit ve kesin (Kaynak: Socket.IO google grubu ):

socket.emit sunucu ve istemcide özel olaylar yayınlamanıza izin verir

socket.send'message'olayla birlikte alınan mesajları gönderir


45

TL; DR:

socket.send(data, callback) esasen aramaya eşdeğerdir socket.emit('message', JSON.stringify(data), callback)

Kaynak koduna bakmadan, gönderme işlevinin daha verimli bir düzenleme olduğunu varsayabilirim : en azından dize mesajları göndermek için ?

Yani evet temelde yaymak çok kullanışlı olan nesneler göndermenizi sağlar.

Bu örneği şu şekilde ele alalım socket.emit:

sendMessage: function(type, message) {
    socket.emit('message', {
        type: type,
        message: message
    });
}

ve skoru evde tutanlar için kullanmak gibi görünüyor socket.send:

sendMessage: function(type, message) {
    socket.send(JSON.stringify({
        type: type,
        message: message
    }));
}

27

socket.sendvanilya WebSocket arabirimiyle uyumluluk için uygulanır. socket.emityalnızca Socket.IO'nun özelliğidir. İkisi de aynı şeyi yapar, ancak socket.emitmesajların işlenmesinde biraz daha uygundur.


socket.emit Socket.IO ile sınırlı değildir ancak net üzerinde de çalışır.
Ajay

0

Temel iki yönlü iletişim sistemlerinde socket.emit'in daha ikna edici ve kullanımı kolay (kişisel deneyim) olduğu kanıtlanmıştır ve Socket.IO'nun öncelikle bu tür amaçlar için oluşturulmuş bir parçasıdır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.