【问题标题】:Receive an ArrayBuffer on WebSocket (ws) [duplicate]在 WebSocket(ws)上接收 ArrayBuffer [重复]
【发布时间】:2017-01-03 14:08:37
【问题描述】:

我想使用ws 处理从客户端收到的 ArrayBuffer 消息。在客户端,由于 ws.binaryType,我直接收到了一个 ArrayBuffer,但在服务器端,我没有收到一个 ArrayBuffer,而是这样的(字符串?):''。

服务器如何接收 ArrayBuffer ?

客户端:

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);
};

服务器端:

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

    });
});

【问题讨论】:

  • 这并不是真正的重复,它不是询问如何将 Buffer 转换为 ArrayBuffer,而是询问如何配置 ws 以便它首先为您提供 ArrayBuffers。作为记录,您可以对浏览器 WebSocket 接口执行相同的操作 - 在上面的示例中,您将在调用 socket.on 之前添加 socket.binaryType = 'arraybuffer';

标签: javascript node.js websocket dataview arraybuffer


【解决方案1】:

只需convert the Buffer to an ArrayBuffer

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

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2014-07-21
    • 2018-11-17
    • 2023-01-17
    • 2020-08-17
    • 2016-05-13
    相关资源
    最近更新 更多