Socket.io как отправить объект JavaScript
Как отправить объект JavaScript с Socket.io
с сервера на клиент? Я использую Socket.io как WebSocket (отправка с помощью .send()
и прослушивание с событием message
).
Когда я пытаюсь сделать что-то вроде серверной стороны:
var myObject = {
message: 'Hello World!'
}
socket.send(myObject);
на стороне клиента я получаю только эту строку: [object Object]
Ответы
Ответ 1
Фактически вам нужно испустить событие:
socket.emit('yourEvent', myObject);
Если вы используете .send()
, вы просто отправляете строковое представление своего объекта, в котором возникает проблема. Обратите внимание, что вы можете использовать .send()
, но вам придется сначала JSON-кодировать объект и декодировать его при приеме.
Если у вас нет конкретной причины, лучше всего использовать стандартный метод Socket.IO .emit()
, так как он делает все это для вас. Это то, для чего оно есть.
Ответ 2
Я просто столкнулся с этой проблемой, используя старый пример. Вот ответ, который я нашел: Миграция 0,6 до 0,7+, который я воспроизвожу ниже.
В v0.6 socket.send
автоматически преобразует объект, подобный {a: 'b'}
в JSON. Вы отправляете данные клиенту с помощью:
socket.send({a: 'b'});
Пока это круто, это создает фундаментальную проблему. JSON не только кодирует объекты, но также строки, числа и т.д.! Таким образом, API более ясен, если вы явно заявляете, что хотите передать JSON (так как есть ограничение производительности, связанное с кодированием/декодированием JSON).
В v0.7 используйте флаг json
:
socket.json.send({a: 'b'});
Теперь вы можете также генерировать и получать пользовательские события между браузером и сервером:
socket.emit('my_event', {a: 'b'});
Аргументы для событий автоматически закодируются в JSON для вас.
Ответ 3
socket.send()
не понимает объект, но ему нравится JSON. Вы можете использовать этот способ:
socket.send(JSON.stringify(myObject));
И используйте JSON.parse(json)
для разбора JSON для Object.
Ответ 4
Попробуйте использовать это на стороне сервера
socket.json.send({ your : 'data' });
и JSON.parse()
на вашей стороне клиента.