Baru-baru ini, saya menghadapi masalah apabila menggunakan nodejs: apabila menghantar berbilang permintaan serentak, ralat 502 telah dikembalikan. Saya meluangkan sedikit masa untuk meneliti masalah ini dan akhirnya menemui penyelesaian. Dalam artikel ini, saya akan berkongsi pengalaman saya dengan harapan dapat membantu orang lain yang mengalami masalah yang sama.
Pertama sekali, kita perlu memahami apa itu ralat 502. Ralat 502 bermakna pelayan tidak dapat mengendalikan permintaan daripada klien dengan betul, biasanya kerana ralat atau tamat masa berlaku semasa permintaan. Dalam nodejs, ralat ini biasanya disebabkan oleh permintaan disekat atau tamat masa permintaan ditetapkan dengan tidak betul.
Seterusnya, mari kita lihat cara menghantar berbilang permintaan serentak dalam nodej. Dalam nodejs, kita boleh menggunakan async.parallel untuk menghantar berbilang permintaan serentak. Kod sampel adalah seperti berikut:
const async = require('async'); const request = require('request'); const urls = [ 'https://www.example.com/page1', 'https://www.example.com/page2', 'https://www.example.com/page3', // Add more URLs here. ]; async.parallel( urls.map(url => callback => request(url, (err, res, body) => callback(err, body))), (err, results) => { if (err) { console.error(err); return; } console.log(results); }, );
Dalam kod di atas, kami menggunakan async.parallel untuk menghantar berbilang permintaan secara selari. Kami meletakkan URL yang kami ingin minta dalam tatasusunan dan kemudian menggunakan fungsi peta untuk menukarnya menjadi satu set permintaan. Kami kemudian menggunakan async.parallel untuk menghantar permintaan ini secara selari dan mengumpul hasil apabila permintaan selesai.
Sekarang mari kita lihat cara menyelesaikan ralat 502. Dalam penyelidikan saya, saya mendapati bahawa ralat 502 biasanya disebabkan oleh permintaan yang disekat atau tamat masa yang tidak ditetapkan untuk permintaan itu. Jika permintaan disekat, ini mungkin kerana kami tidak mempunyai fungsi panggil balik yang mengendalikan permintaan dengan betul atau kerana kami tidak mengeluarkan sumber semasa permintaan.
Salah satu cara ialah menggunakan pilihan simpan-hidup yang disediakan oleh perpustakaan permintaan. Pilihan keep-alive membenarkan permintaan disimpan dalam kumpulan sambungan dan menggunakan semula sambungan TCP sedia ada, dengan itu mengurangkan beban pada pelayan dan meningkatkan prestasi. Kita boleh menambahkan ini pada pilihan permintaan:
const request = require('request').defaults({ forever: true });
Cara lain adalah untuk mengelakkan permintaan disekat dengan menambahkan pilihan tamat masa pada permintaan. Kita boleh menambah pilihan tamat masa pada pilihan permintaan:
const request = require('request').defaults({ timeout: 5000 });
Kod di atas menetapkan tamat masa kepada 5000 milisaat, yang bermaksud jika permintaan melebihi 5 saat, ralat tamat masa akan dilemparkan.
Akhir sekali, jika anda juga menghadapi ralat 502, anda boleh cuba menghantar permintaan secara berkelompok dan bukannya sekaligus. Melakukannya boleh mengurangkan beban pada pelayan dan mengurangkan kebarangkalian 502 ralat. Kod sampel adalah seperti berikut:
const async = require('async'); const request = require('request').defaults({ timeout: 5000 }); const urls = [ 'https://www.example.com/page1', 'https://www.example.com/page2', 'https://www.example.com/page3', // Add more URLs here. ]; const chunkSize = 2; // Set the maximum number of requests to send at once. async.eachLimit( urls, chunkSize, (url, callback) => request(url, (err, res, body) => callback(err, body)), (err) => { if (err) { console.error(err); return; } console.log('All requests completed successfully.'); }, );
Dalam kod di atas, kami membahagikan permintaan kepada dua kumpulan dan menggunakan async.eachLimit untuk mengehadkan bilangan maksimum permintaan yang dihantar pada satu masa. Melakukannya boleh mengurangkan beban pada pelayan dan mengurangkan kebarangkalian 502 ralat.
Ringkasnya, jika anda menghadapi masalah ralat permintaan serentak nodejs 502, anda boleh cuba menggunakan kaedah di atas untuk menyelesaikannya. Dengan memberi perhatian kepada fungsi panggil balik permintaan dan tetapan tamat masa, anda boleh mengurangkan kemungkinan menyekat permintaan. Di samping itu, menghantar permintaan dalam kelompok boleh mengelakkan situasi beban berlebihan dan mengurangkan kebarangkalian ralat 502.
Atas ialah kandungan terperinci nodejs berbilang permintaan serentak 502. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!