@MishaXXL

Почему при отправке сообщения через сокеты, отправляется Blob?

Есть сервер
import { WebSocketServer } from 'ws'
const webSocketServer = new WebSocketServer({ port: 8081 })
const clients = {}

webSocketServer.on('connection', ws => {
  const id = Math.random()
  clients[id] = ws

  ws.on('message', function(message) {
    for (let key in clients) {
      clients[key].send(message)
    }
  });

  ws.on('close', function() {
    delete clients[id];
  });
});


И есть клиент
const socket = new WebSocket('ws://localhost:8081')
document.forms.publish.onsubmit = function() {
  var outgoingMessage = this.message.value;
  socket.send(outgoingMessage);
  return false;
};

socket.onmessage = function(event) {
    const incomingMessage = event.data;
    console.log(incomingMessage)
    showMessage(incomingMessage);   
};

function showMessage(message) {
  var messageElem = document.createElement('div');
  messageElem.appendChild(document.createTextNode(message));
  document.getElementById('subscribe').appendChild(messageElem);
}


Почему в incomingMessageприходит именно Blob?
Blob {size: 3, type: ''}

Как из данной структуры, где два свойства без информации, через
await new Response(incomingMessage).text()
уже получаю строку с данными в виде "123", если он не содержит и намека на эти данные?

Почему именно Blob, а не текст или Buffer?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
как и всегда, все ответы содержатся в Учебнике

При получении данных, текст всегда поступает в виде строки. А для бинарных данных мы можем выбрать один из двух форматов: Blob или ArrayBuffer.

Это задаётся свойством socket.binaryType, по умолчанию оно равно "blob", так что бинарные данные поступают в виде Blob-объектов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы