В чем разница между этими двумя?
Я заметил, что, если я изменил с socket.emit
на socket.send
в рабочей программе, серверу не удалось получить сообщение, хотя я не понимаю, почему.
Я также заметил, что в моей программе, если я изменил с socket.emit
на socket.send
, сервер получает сообщение, но, похоже, получает его несколько раз. Когда я использую, console.log()
чтобы увидеть, что сервер получил, он показывает что-то отличное от того, когда я использую socket.emit
.
Почему это поведение? Как вы знаете, когда использовать socket.emit
или socket.send
?
socket.send
это просто псевдоним дляsocket.emit('message', message);
Просто и точно (Источник: Socket.IO google group ):
socket.emit
позволяет создавать пользовательские события на сервере и клиентеsocket.send
отправляет сообщения, полученные с'message'
событиемисточник
TL; DR:
socket.send(data, callback)
по сути эквивалентно вызовуsocket.emit('message', JSON.stringify(data), callback)
Не глядя на исходный код, я бы предположил, что функция send более эффективна для редактирования: по крайней мере, для отправки строковых сообщений ?
Так что да, в принципе, Emit позволяет отправлять объекты, что очень удобно.
Возьмите этот пример с
socket.emit
:и для тех, кто ведет счет дома, вот как это выглядит
socket.send
:источник
socket.send
реализован для совместимости с интерфейсом vanilla WebSocket.socket.emit
это особенность Socket.IO только. Они оба делают то же самое, ноsocket.emit
немного удобнее в обработке сообщений.источник
В базовых системах двусторонней связи socket.emit оказался более убедительным и простым в использовании (личный опыт) и является частью Socket.IO, который в первую очередь создан для таких целей.
источник
https://socket.io/docs/client-api/#socket-send-args-ack
socket.send
// Отправляет сообщение о событииsocket.emit(eventName[, ...args][, ack])
// вы можете настроить eventNameисточник