Il y a en fait un moyen de le faire sans définir Content-Type: text/plain
et toujours utiliser text/html
comme le Content-Type
, mais vous devez dire au navigateur de s'attendre à des morceaux de données.
Cela peut être fait facilement comme ceci :
var http = require('http');
http.createServer(function(request, response) {
response.setHeader('Connection', 'Transfer-Encoding');
response.setHeader('Content-Type', 'text/html; charset=utf-8');
response.setHeader('Transfer-Encoding', 'chunked');
response.write('hello');
setTimeout(function() {
response.write(' world!');
response.end();
}, 10000);
}).listen(8888);
Cependant, vous devez savoir que jusqu'à ce que response.end()
soit appelé, la requête est toujours en cours et bloque d'autres requêtes vers votre serveur nodejs.
Vous pouvez facilement tester cela en ouvrant cette page (localhost:8888) sur deux onglets différents. L'un d'eux attendra 10 secondes, et l'autre n'obtiendra que le début de la réponse une fois que la première réponse se termine (ce qui signifie que vous attendrez 10 secondes pour le début de la réponse et encore 10 secondes jusqu'à la fin de la réponse en utilisant ce code).
Vous pouvez probablement surmonter cet obstacle en exécutant plusieurs processus nodejs et en équilibrant la charge entre eux, mais alors cela commence à devenir beaucoup plus compliqué, et c'est un sujet qui devrait être abordé ailleurs... :)