Подтвердить что ты не робот

Socket.io как отправить объект JavaScript

Как отправить объект JavaScript с Socket.io с сервера на клиент? Я использую Socket.io как WebSocket (отправка с помощью .send() и прослушивание с событием message). Когда я пытаюсь сделать что-то вроде серверной стороны:

var myObject = {
    message: 'Hello World!'
}

socket.send(myObject);

на стороне клиента я получаю только эту строку: [object Object]

4b9b3361

Ответ 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() на вашей стороне клиента.