Tìm kiếm trang web

javascript - Nhận một ArrayBuffer trên WebSocket (ws)


Tôi muốn xử lý các tin nhắn ArrayBuffer nhận được từ client sử dụng ws. Ở phía client, tôi trực tiếp nhận được một ArrayBuffer nhờ vào ws.binaryType, nhưng ở phía server, tôi không nhận được ArrayBuffer mà nhận được thứ gì đó như sau (chuỗi ?): '< Buffer 00 00 2a 00 00 00 00 00 00 00 00 00 00 00 00 00>'.

Làm thế nào để máy chủ có thể nhận một ArrayBuffer?

Phía khách hàng :

var ws = new WebSocket("ws://localhost:3000/");
ws.binaryType = 'arraybuffer';
ws.onopen = function() {
    var buffer = new ArrayBuffer(15);
    var dv = new DataView(buffer);
    dv.setInt16(1, 42);
    ws.send(buffer);
};

Phía máy chủ :

var express = require('express'),
app = express(),
server = require('http').createServer(),
WebSocketServer = require('ws').Server,
wss = new WebSocketServer({
    server: server
});

...

wss.on('connection', function(socket) {
    console.log(message);
    //log : <Buffer 00 00 2a 00 00 00 00 00 00 00 00 00 00 00 00 00>


    socket.on('message', function(message) {

        //would like to read and handle the arraybuffer properly

    });
});

Câu trả lời #1

Chỉ cần chuyển đổi Buffer sang ArrayBuffer

var buf = new Uint8Array(message).buffer;
var dv = new DataView(buf);