أنا أستخدم مكتبة socket.io-stream لنقل الملفات بين خوادم عقدة.
الخادم أ: (إرسال ملف)
""
var clientIO = يتطلب ('socket.io-client') ؛
var ss = يتطلب ('socket.io-stream') ؛
var clientSocket = clientIO ( http://ServerB_Address
) ؛
clientSocket.on ('خطأ'، (خطأ) => {
console.log (خطأ) ؛
}) ؛
var stream = ss.createStream ({objectMode: true}) ؛
ss (clientSocket) .emit (إرسال ملف ، دفق ، بيانات) ؛
var uploadedBytes = 0 ؛
فار من = 0 ؛
var reader = fs.createReadStream (filePath، {start: from}) ؛
Reader.pipe (تيار)
.on ('error'، (error) => {
console.log (خطأ) ؛
})
.on ('data'، (chunk) => {
uploadedBytes + = Buffer.byteLength (قطعة) ؛
}) ؛
Server B: (Receive File)
```
var fs = require('fs');
var io = require('socket.io')(http);
var ss = require('socket.io-stream');
io.on('connection', (socket) => {
// listen to send file
ss(socket).on('send-mail', (stream, data) => {
console.log(`*** Begin receive file`);
var writer = fs.createWriteStream(downloadPath, {flags: 'a'});
stream.pipe(writer);
var size = 0;
stream.on('data', (chunk) => {
size += chunk.length;
console.log(`*** Receive ${size} from mail`);
});
stream.on('end', () => {
console.log(`*** End file`);
});
stream.on('error', (error) => {
console.log(`*** Error when receiving file`);
console.log(error);
});
});
});
إنه يعمل بشكل جيد ، ولكن عند نقل الملف إذا تم إيقاف خادم العقدة الثاني ، فإن التطبيق الموجود في الخادم الآخر يتعطل ويتم إلقاء حدث خطأ لم تتم معالجته
هل يمكن لأي شخص أن يخبرني كيف يمكنني اكتشاف هذا الخطأ؟ وما إذا كانت هناك طريقة أفضل لنقل الملفات بين خوادم العقدة؟
استخدم مستمع الحدث لحدث "الخطأ". أو استخدم مكتبة باعث الأحداث الخالصة
كيفية استخدام مستمع الحدث للخطأ؟ من فضلك أعطني مثالا ، لأنني سجلت خطأ لمقبس العميل.
لا تستخدم socket.io ... ، ستوفر الوقت على المدى الطويل ، ما عليك سوى إلقاء نظرة على أكثر من 300 مشكلة مفتوحة بدون إجابات ...
آخر التزام مهم كان قبل 6 أشهر ...
التعليق الأكثر فائدة
لا تستخدم socket.io ... ، ستوفر الوقت على المدى الطويل ، ما عليك سوى إلقاء نظرة على أكثر من 300 مشكلة مفتوحة بدون إجابات ...
آخر التزام مهم كان قبل 6 أشهر ...