Pendahuluan
Waktu habis koneksi jaringan adalah masalah umum yang sering dihadapi pengguna SDK OSS saat mengunggah file. Masalah ini menyebabkan kesalahan ConnectionTimeOut, yang berdampak negatif pada pengalaman pengguna.
Pemecahan Masalah
Berikut adalah analisis kemungkinan penyebab dan solusi untuk menangani waktu habis koneksi jaringan SDK OSS, karena masalah ini sulit direproduksi.
Lingkungan Jaringan
Analisis tautan jaringan:
Telepon Genggam/PC --- Jaringan Operator --- Server OSS
Jaringan Anda mungkin berada di node tepi jaringan operator, sehingga permintaan ke jaringan operator lebih rentan terhadap kegagalan. Untuk mengurangi ketergantungan pada jaringan operator, gunakan node tepi CDN sebagai akselerator. Tautan jaringannya menjadi:
Telepon Genggam/PC -- Node Tepi CDN Terdekat -- Jaringan Operator -- Server OSS
Jika masalah tetap ada dan kesalahan ConnectionTimeOut masih terjadi, tinjau analisis berikut.
Konfigurasi Jaringan
Berikut adalah detail pesan kesalahan waktu habis:
"ConnectionTimeoutError&errormsg=Gagal mengunggah beberapa bagian dengan kesalahan: ConnectionTimeoutError: Koneksi timeout selama 60000ms, PUT https://***.oss-cn-hangzhou.aliyuncs.com/***/***/***.mp4?partNumber=2&uploadId=*** -2 (terhubung: false, keepalive socket: false)headers: {} part_num: 2Kesimpulan dari pesan kesalahan adalah sebagai berikut:
Koneksi gagal karena klien tidak menerima respons dari server dalam 60 detik.
Menurut log CDN, waktu habis terjadi karena jaringan terputus sebelum bagian sepenuhnya diunggah.
Dalam kondisi jaringan buruk, klien/PC tidak dapat menerima respons dari server OSS dalam waktu lama jika ukuran file terlalu besar.
Berdasarkan kesimpulan tersebut, kami merekomendasikan solusi berikut:
Gunakan metode unggah multipart dengan membatasi ukuran maksimum bagian menjadi 1 MB.
Tambahkan mekanisme pemulihan untuk mengunggah ulang bagian yang gagal.
Perpanjang periode waktu habis.
// Contoh kode unggah multipart di JS SDK let retryCount = 0; let retryCountMax = 3; ... const uploadFile = function uploadFile(client) { if (! uploadFileClient || Object.keys(uploadFileClient).length === 0) { uploadFileClient = client; } ... console.log(`${file.name} => ${key}`); const options = { progress, Partsize: 1000*1024, // Atur ukuran bagian. Timeout: 120000, // Atur periode waktu habis. }; if (currentCheckpoint) { options.checkpoint = currentCheckpoint; } return uploadFileClient.multipartUpload(key, file, options).then((res) => { console.log('unggah sukses: %j', res); currentCheckpoint = null; uploadFileClient = null; }).catch((err) => { if (uploadFileClient && uploadFileClient.isCancel()) { console.log('hentikan unggah!'); } else { console.error(err); //coba lagi if (retryCount < retryCountMax){ retryCount++; console.error("retryCount : " + retryCount); uploadFile(''); } } }); };
Ringkasan
Jika Anda mengakses data OSS menggunakan nama domain OSS standar (misalnya, oss-cn-hangzhou.aliyuncs.com), akses dilakukan melalui jaringan operator. Dalam situasi ini, kesalahan ConnectionTimeOut dapat terjadi akibat lingkungan jaringan yang kompleks (seperti jaringan tidak stabil atau kondisi jaringan buruk). Solusi yang dapat dicoba antara lain:
Gunakan metode unggah multipart dengan membatasi ukuran bagian antara 100 KB hingga 1 MB.
CatatanServer OSS tidak menerima bagian yang lebih kecil dari 100 KB.
Tambahkan mekanisme pemulihan untuk mengunggah ulang bagian yang gagal.
CatatanMekanisme ini diaktifkan secara default di Android/iOS SDK, sehingga tidak diperlukan konfigurasi tambahan.
Perpanjang periode waktu habis.
Gunakan layanan akselerasi CDN untuk mempercepat transmisi data di OSS.