推荐答案
Socket.IO 支持二进制数据的传输,可以通过以下方式实现:
- Blob 和 ArrayBuffer:Socket.IO 可以直接发送
Blob
或ArrayBuffer
类型的二进制数据。 - Base64 编码:如果客户端或服务器不支持直接传输二进制数据,Socket.IO 会自动将二进制数据转换为 Base64 编码的字符串进行传输。
- 流式传输:对于大文件或大量数据,Socket.IO 支持分块传输,避免一次性传输大量数据导致的内存问题。
本题详细解读
1. Blob 和 ArrayBuffer 传输
Socket.IO 可以直接处理 Blob
和 ArrayBuffer
类型的二进制数据。例如,客户端可以通过以下代码发送二进制数据:
const blob = new Blob(['Hello, World!'], { type: 'text/plain' }); socket.emit('binaryData', blob);
服务器端可以这样接收:
socket.on('binaryData', (data) => { console.log(data); // 这里 data 是一个 Blob 对象 });
2. Base64 编码
如果客户端或服务器不支持直接传输二进制数据,Socket.IO 会自动将二进制数据转换为 Base64 编码的字符串。这种方式虽然增加了数据大小,但确保了兼容性。
3. 流式传输
对于大文件或大量数据,Socket.IO 支持分块传输。这种方式可以有效避免一次性传输大量数据导致的内存问题。例如:
const stream = fs.createReadStream('large-file.bin'); stream.on('data', (chunk) => { socket.emit('binaryChunk', chunk); }); stream.on('end', () => { socket.emit('binaryEnd'); });
服务器端可以这样接收:
-- -------------------- ---- ------- --- ------------ - ---------------- ------------------------ ------- -- - ------------ - ---------------------------- -------- --- ---------------------- -- -- - --------------------- --- ------ ------- -- -- ------------ ---
通过这种方式,Socket.IO 可以高效地处理二进制数据的传输。