2017-09-17 6 views
0

ノードjsにresponse.endに関する混乱があります。次のコードがあります。 ノードjsのresponse.endを持たないHttpサーバー

const http = require("http"); 

http.createServer(function(req, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 

    setInterval(() => { 
     response.write(new Date() + "\n"); 
    }, 1000) 


}).listen(8080); 

console.log("Service Running at 8080 127.0.0.1") 

は今20秒以上後にブラウザで日付を印刷を開始します。この上記のコードは、今、このコードは、任意の reponse.endを持っていない、それは明らかですので、その後 setIntervel内のコードの任意 response.end()があった場合決して実行しません。

しかし、これを実行しても、ページをロードするのはいつまでもかかりません。

const http = require("http"); 

http.createServer(function(req, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 

    response.write("Test"); 


}).listen(8080); 

console.log("Service Running at 8080 127.0.0.1"); 

が、私は上記のコードでresponse.endを追加する場合、それはうまく動作します。

誰もこの奇妙な行動を説明することができます。その理由は、setIntervalresponse.endなしで使用する理由です。

+0

あなたが 'response.write(" Test \ n ")' – slebetman

+0

を実行した場合、何が起こるのですか?ページが要求されても何も起こらず、しばらくしてからPageが応答しないなどのエラーが発生します。 –

+0

"なぜresponse.endを使用せずにsetIntervalを使用するか"。最初のコードが動作していると言っていますか? –

答えて

0

あなたが問題として示すことは、文字通り何が起こるべきかです。ブラウザはサーバーにデータを要求し、サーバーはデータの送信を開始し、「完了しました。」という信号を送信しないので、ブラウザはメッセージが完了したことを認識します。

ここで問題となるのは、サーバーからブラウザにデータを取得する方法です。

  1. サーバーからブラウザにデータをプッシュできるようにWebソケット接続を設定します。それがそれのためのものです。または、
  2. ブラウザでsetTimeoutまたはsetIntervalなどを使用して繰り返し呼び出しを設定し、毎秒サーバーを呼び出すだけで、サーバーは小さな小さなメッセージで応答し、すべては実際にはとなります。
関連する問題