我尝试过以几种不同的方式发送 Float32Array 和 ArrayBuffer 但我在客户端收到的缓冲区总是看起来是空的。我应该如何发送数据?我怎样才能访问它?
\n\n这是我的最新尝试:
\n\n服务器.js
\n\nconst WebSocket = require(\'ws\');\n\nconst wss = new WebSocket.Server({ port: 8000 });\n\nwss.on(\'connection\', function connection(ws) {\n\n var arr1 = new Float32Array(4);\n for (var i = 0; i < arr1.length; ++i)\n arr1[i] = (i + 100) / 7;\n\n// ws.send(arr1.buffer);\n\n\n var arr2 = new ArrayBuffer(8);\n for(var i = 0; i < 8; i++)\n arr2[i] = i * 17;\n\n ws.send(arr2); \n});\nRun Code Online (Sandbox Code Playgroud)\n\n客户端.html
\n\n<!DOCTYPE html>\n<html>\n<head></head>\n<body>\n\n<script>\n\nvar gData = null;\n\nvar ws = new WebSocket("ws://192.168.0.7:8000");\nws.binaryType = \'arraybuffer\';\n\nws.onmessage = function(message) {\n console.log(message.data);\n gData = message.data;\n};\n\n</script>\n\n</body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n\n控制台输出
\n\nArrayBuffer(8)\xc2\xa0{}\nRun Code Online (Sandbox Code Playgroud)\n\n另外,只是因为我很好奇,如何将二进制数据发送回服务器?
\n您需要创建 WebSocket 并将其类型设置为arraybuffer( binaryType = 'arraybuffer')。我认为您在服务器端忘记了这一点。
在此示例中,字节是从 Base64 字符串信息中获取的。
// /sf/ask/1525810961/
function base64ToArrayBuffer(base64) {
var binary_string = Buffer.from(base64, 'base64').toString('binary');
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
// websocket server
const WebSocket = require("ws"); // websocket server
const wss = new WebSocket.Server({ port: 8082 });
console.log("WebSocket Server Started on port 8082");
wss.binaryType = 'arraybuffer';
const content_base64 = "c3RyZWFtIGV2ZW50"; // Place your base64 content here.
const binaryData = base64ToArrayBuffer(content_base64);
wss.on("connection", (ws) => {
console.log("WebSocket sending msg");
ws.send(binaryData);
});
Run Code Online (Sandbox Code Playgroud)
不要忘记通过命令安装 npm websocket 模块:
$ npm install websocket
Run Code Online (Sandbox Code Playgroud)