Qual a diferença entre esses dois?
Percebi que, se eu mudasse de socket.emit
para socket.send
em um programa de trabalho, o servidor não receberia a mensagem, embora eu não entenda o porquê.
Também notei que, no meu programa, se eu mudei de socket.emit
para socket.send
, o servidor recebe uma mensagem, mas parece recebê-la várias vezes. Quando eu uso console.log()
para ver o que o servidor recebeu, ele mostra algo diferente de quando eu uso socket.emit
.
Por que esse comportamento? Como você sabe quando usar socket.emit
ou socket.send
?
socket.send
é simplesmente um apelido parasocket.emit('message', message);
Simples e preciso (Fonte: Socket.IO google group ):
socket.emit
permite emitir eventos personalizados no servidor e no clientesocket.send
envia mensagens recebidas com o'message'
eventofonte
TL; DR:
socket.send(data, callback)
é essencialmente equivalente a chamarsocket.emit('message', JSON.stringify(data), callback)
Sem olhar para o código-fonte, eu assumiria que a função de envio é uma edição mais eficiente : para enviar mensagens de string, pelo menos ?
Então, sim, basicamente emitir permite que você envie objetos, o que é muito útil.
Veja este exemplo com
socket.emit
:e para quem mantém a pontuação em casa, eis o que parece usar
socket.send
:fonte
socket.send
é implementado para compatibilidade com a interface WebSocket vanilla.socket.emit
é recurso apenas do Socket.IO. Ambos fazem o mesmo, massocket.emit
é um pouco mais conveniente no tratamento de mensagens.fonte
Em sistemas básicos de comunicação bidirecional, o socket.emit provou ser mais convincente e fácil de usar (experiência pessoal) e faz parte do Socket.IO, construído principalmente para esses fins
fonte
https://socket.io/docs/client-api/#socket-send-args-ack
socket.send
// Envia um evento de mensagemsocket.emit(eventName[, ...args][, ack])
// você pode personalizar eventNamefonte