Websocket 发送 blob 对象而不是字符串

Muh*_*han 7 javascript websocket node.js

我以某种方式能够运行,Websocket但问题是,on message当我想发送文本时,它正在向我发送事件对象 blob。

这是我的 websocket 服务器代码:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 })

var sockets = [];

wss.on('connection', ws => {
    //var id = ws.upgradeReq.headers['sec-websocket-key'];
    //console.log("New connection id ::", id);
    //w.send(id);
    sockets.push(ws);
    console.log("New client connected"+ ws);

  ws.on('message', message => {
    
    console.log(`Received message => ${message}`)
    
    //var id = ws.upgradeReq.headers['sec-websocket-key'];
    //var mes = JSON.parse(message);
    
    //sockets[message.to].send(mes.message);
     // console.log('Message on :: ', id);
    //console.log('On message :: ', message);
    sockets.forEach(w=> {
        w.send(message);
    });
  })
  
  ws.send('Welcome by server!')
})
Run Code Online (Sandbox Code Playgroud)

客户端代码摘录

connection.onmessage = (e) => {
  document.getElementById("ReceivedText").innerHTML += ("<li>" + e.data + "</li>");
    
   // ReceviedText
  console.log(e.data);
  console.log(e);

  var reader = new FileReader(e.data);
  console.log(reader.result);
  
  //console.log(reader.readAsText());
  console.log(reader.readAsText(e.data));
  
}
Run Code Online (Sandbox Code Playgroud)

我发现我可以使用文件读取器将 blob 转换为字符串,但它返回 null。

小智 6

我也面临同样的问题。我可以通过在 Server 中添加{binary:isBinary}来修复它。

这是我的代码:-

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(data,isBinary) {
    wss.clients.forEach(function each(client) {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(data, { binary: isBinary });
      }
    })
  })
})
Run Code Online (Sandbox Code Playgroud)


Tom*_*lie 3

我对对象数组也有同样的问题。通过将数据转换为 JSON 字符串来修复此问题JSON.stringify。在客户端,您可以通过 获取数据JSON.parse

服务器

sockets.forEach(w => {
  w.send(JSON.stringify(message));
});
Run Code Online (Sandbox Code Playgroud)

客户

connection.onmessage = (message: object) => {
  console.log(JSON.parse(message['data']));
}
Run Code Online (Sandbox Code Playgroud)