如何使用套接字发送大文件?
我有一个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。