La plus simple nodejs serveur echo
Je suis de se familiariser avec les flux de nodejs et j'ai une question:
J'ai ce que je pense est le plus simple possible nodejs "serveur echo" c'est à dire un serveur de simples tuyaux de retour pour le flux de réponse quelle qu'elle reçoit par l'intermédiaire de la demande de flux.
Cela fonctionne, mais avec une mise en garde. Le client reçoit uniquement les données de retour après la fermeture de la soumission de flux.
Voici le code du serveur:
var http = require('http')
var server = http.createServer(function (req, res) {
req.pipe(res);
});
server.listen(8000);
Et voici comment je l'ai tester:
De faire ce qui suit fonctionne très bien
term1> node server.js&
term2> echo 'hello world!'|curl --no-buffer --data-binary @- 'http://localhost:8000'
hello world!
Toutefois, il ne fonctionne que parce que l'écho ferme sa sortie descripteur de fichier après avoir été fait, c'est à dire., le serveur ne va pas écrire quoi que ce soit jusqu'à ce que après son client se fait envoyer des trucs:
term2>
term2> yes|curl --no-buffer --data-binary @- 'http://localhost:8000'
(cette ligne est coincé pour toujours)
Je m'attends à ce que yes
remplira stream tampons assez rapide donc je voudrais commencer à voir y revenir assez vite. Malheureusement ils ne le font jamais.
Est-ce prévu? Comment dois-je utiliser les cours d'eau/tuyaux de sorte qu'ils ont l'effet désiré?
Par la manière, je ne suis pas de soins si la sortie serait revenir en morceaux... je comprends que ce serait les résultats de flux (ou le fichier sous-jacent i/o) en faisant de leur mise en mémoire tampon de la magie.
Merci pour votre aide
OriginalL'auteur Diomedes | 2013-06-19
Vous devez vous connecter pour publier un commentaire.
Ok,
Je pense que j'ai compris ce que je faisais mal.
Le
server.js
fonctionnait bien... c'étaitcurl
qui a été la rupture de la canalisation.Apparemment, le
@-
option traite stdin, comme un fichier ,c'est à dire en lit le contenu complet et puis le soumet. Je ne pouvais pas trouver comment fairecurl
pipe le contenu qu'ils sont en train de lire. Je pense que c'est pas faisable, parce quecurl
veut traiter le contenu du fichier comme un HTTP post forme de valeur..De toute façon, j'ai modifié l'exemple ci-dessus à l'aide d'un simple nodejs client qui était en train de faire ce que je voulais:
nodejs les ruisseaux et les tubes de rock!!
OriginalL'auteur Diomedes