Maison > Questions et réponses > le corps du texte
Sur un coup de tête, j'ai défini un itinéraire en express :
var n = 0;
app.get('/', function(req, res){
console.log(++n);
setTimeout(function(){
console.log("ok");
res.send("ok")
},6000)
});
Le test est le suivant, ouvrez N onglets du navigateur ;
Ouvrez le premier onglet et accédez à localhost :3000/
Ouvrez le deuxième onglet dans les 6 secondes et accédez à localhost :3000/
On constate que la première requête est en res.send ( ) ne répondra pas au deuxième accès avant la fin ;
Il n'imprimera pas 2 avant console.log(++n); après le premier accès à res.end
============ == =========Séparateur magique====================================== = ===
Correction de l'expérience, selon les commentaires ci-dessous, l'expérience ci-dessus a été ouverte dans différents onglets du même navigateur,
mais en utilisant des navigateurs différents, ce qui signifie que j'ai utilisé Google Chrome pour ouvrir localhost:3000 /, puis utilisez le navigateur IE pour ouvrir localhost:3000/ dans les 6 secondes. La requête précédente ne bloquera pas la suivante, ce qui entraînera les questions suivantes.
La première question, si 10 000 utilisateurs y accèdent en même temps en 6 secondes, dois-je... maintenir 10 000 connexions ? Est-ce possible ? Je suis si confus.
Deuxième question, pourquoi est-il bloqué à l'ouverture du même navigateur ?
天蓬老师2017-05-16 13:41:29
Le runtime de Node utilise une boucle d’événements à un seul thread. Attendez setTimeout()
函数是一个阻塞操作,Node 只有一个线程执行 setTimeout()
。因此其他的操作都在 队列
dans votre code.
Vous pouvez vous référer ici : http://www.nodebeginner.org/i...
phpcn_u15822017-05-16 13:41:29
Il s'agit d'un problème de navigateur.
La bonne solution est la suivante :
https://github.com/tianyk/not...
Code modifié selon Pu Ling :
var status = 'ready';
app.get('/', function(req, res){
// 进入之后监听haha事件
proxy.once('haha', function(x){console.log(x);
res.send("ok");
});
// 打印状态;
console.log(status);
// 判断状态,状态为ready,
if(status == 'ready'){
status = 'pending';
console.log(++n);
setTimeout(function(){
proxy.emit('haha',"我是啊啊啊啊啊");
console.log("ok");
status = 'ready'
},6000)
}else{
console.log("现在是pending状态,我只能等待某个请求返回触发emit")
}
});
Notez ici que res est traité dans le rappel, afin que le rappel puisse être distribué aux différents demandeurs ;
Le code que j'ai commencé à écrire ; res est traité dans le timer, et un rappel est passé sous forme de paramètres ; signalé, et je ne comprends pas très bien ;
世界只因有你2017-05-16 13:41:29
Je ne comprends pas Nodejs, mais j'ai toujours entendu dire que Nodejs pouvait gérer une concurrence élevée.