Seketika, saya menentukan laluan secara ekspres:
var n = 0;
app.get('/', function(req, res){
console.log(++n);
setTimeout(function(){
console.log("ok");
res.send("ok")
},6000)
});
Ujian adalah seperti berikut, buka N tab pelayar;
Buka tab pertama dan akses localhost:3000/
Buka tab kedua dalam masa 6 saat dan akses localhost:3000/
Didapati permintaan pertama berada dalam res.send ( ) tidak akan bertindak balas kepada akses kedua sebelum tamat;
console.log(++n); = ======================== Pemisah ajaib =========================== ===
Percubaan pembetulan, mengikut komen di bawah, percubaan di atas dibuka dalam tab berbeza pada penyemak imbas yang sama,tetapi menggunakan penyemak imbas yang berbeza, bermakna, saya menggunakan Google Chrome untuk membuka localhost:3000 /, dan kemudian menggunakan pelayar IE untuk membuka localhost:3000/ dalam masa 6 saat Permintaan sebelumnya tidak akan menyekat yang berikutnya, mengakibatkan soalan berikut.
Soalan pertama, jika 10,000 pengguna mengaksesnya pada masa yang sama dalam masa 6 saat, adakah saya perlu mengekalkan 10,000 sambungan? Saya jadi keliru.
Soalan kedua, mengapa ia disekat apabila membuka pelayar yang sama?
Waktu jalan node menggunakan gelung acara berbenang tunggal. Tunggu dalam
setTimeout()
函数是一个阻塞操作,Node 只有一个线程执行setTimeout()
。因此其他的操作都在队列
dalam kod anda.Anda boleh rujuk di sini: http://www.nodebeginner.org/i...
Ini adalah masalah pelayar
Penyelesaian yang betul adalah seperti berikut:
https://github.com/tianyk/not...
Kod ditukar mengikut Pu Ling:
Perhatikan di sini bahawa res diproses dalam panggilan balik, supaya panggilan balik boleh diedarkan kepada peminta yang berbeza
Kod yang saya mula tulis res diproses dalam pemasa, dan panggilan balik dihantar dalam bentuk parameter dilaporkan, dan saya tidak begitu faham
Saya tidak faham Nodejs, tetapi saya selalu mendengar bahawa Nodejs boleh mengendalikan konkurensi tinggi Mari kita lihat.