如何使用套接字发送大文件?

我有一个zip文件(15 MB),想要发送到android套接字连接,我可以通过以下代码发出:

fs.readFile('path',function(err,fileData){ io.to(socketId).emit('sendFile',{'file':fileData.toString('base64')}); }); 

使用上面的代码,小文件发送没有任何延迟,如果有任何大尺寸的文件发送延迟。 如何以更好的方式实现这一点。

您可以尝试使用socket.io-stream,如下例所示:

服务器:

 'use strict'; const io = require('socket.io')(3000); const ss = require('socket.io-stream'); const fs = require('fs'); var filename = 'test.zip'; // 80MB file io.on('connection', function (socket) { console.log('client connected'); socket.on('sendmeafile', function () { var stream = ss.createStream(); stream.on('end', function () { console.log('file sent'); }); ss(socket).emit('sending', stream); fs.createReadStream(filename).pipe(stream); }); }); console.log('Plain socket.io server started at port 3000'); 

客户:

 'use strict'; const socket = require('socket.io-client')('http://localhost:3000'); const ss = require('socket.io-stream'); const fs = require('fs'); var filename = 'test-copy.zip'; socket.on('connect', function () { console.log('connected'); socket.emit('sendmeafile'); }); ss(socket).on('sending', function(stream) { stream.pipe(fs.createWriteStream(filename)); stream.on('end', function () { console.log('file received'); }); }); 

正如jfriend00在他的评论中写道,你不需要http。