146 votes

socket.emit () vs socket.send ()

Quelle est la différence entre ces deux?

J'ai remarqué que si j'ai changé d' socket.emit de socket.send dans un programme de travail, le serveur n'a pas pu recevoir le message, bien que je ne comprends pas pourquoi.

J'ai aussi remarqué que dans mon programme, si j'ai changé d' socket.emit de socket.send, le serveur reçoit un message, mais il semble pour le recevoir plusieurs fois. Lorsque j'utilise console.log() pour voir ce que le serveur a reçu, il montre quelque chose de différent de quand j'utilise socket.emit.

Pourquoi ce comportement? Comment savez-vous quand utiliser socket.emit ou socket.send?

136voto

charles Points 2856

Avec socket.emit, vous pouvez enregistrer un événement personnalisé de la manière suivante:

serveur:

 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);
  });
});
 

client:

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

Socket.send fait la même chose, mais vous ne vous inscrivez pas à 'news' mais au message suivant:

serveur:

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

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

client:

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

110voto

M.D. Points 766

Simple et précis (Source: groupe Google Socket.IO ):

socket.emit vous permet d'émettre des événements personnalisés sur le serveur et le client

socket.send envoie des messages reçus avec l'événement 'message'

50voto

Kyle Shay Points 108

TL;DR:

socket.send(data, callback) est essentiellement équivalent à l'appel de socket.emit('message', JSON.stringify(data), callback)

Sans regarder le code source, je suppose que la fonction est plus efficace edit: pour l'envoi d'une chaîne de messages, au moins?

Donc oui, fondamentalement, émettent vous permet d'envoyer des objets, ce qui est très pratique.

Prenons un exemple avec socket.emit:

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

et pour ceux qui tiennent le score à la maison, voici à quoi il ressemble à l'aide de socket.send:

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

29voto

artch Points 780

socket.send est implémenté pour la compatibilité avec l'interface vanilla WebSocket. socket.emit est une fonctionnalité de Socket.IO uniquement. Ils font tous les deux la même chose, mais socket.emit est un peu plus pratique pour gérer les messages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X