0

サーバーから送信されたイベントを使用して、Web ページがサーバーから定期的に更新されるようにしようとしています。問題は、クライアントがサーバーとやり取りできることですが、サーバーからの応答がクライアントに届いていませんか? 基本的に、Firefox で html ファイルを開くと、サーバーがリクエストを受け取り、応答の送信を開始することはわかっていますが、Web ページには何も表示されません...何が問題なのかよくわかりません。助けてください!

ここに私のクライアントコードがあります:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
</head>
  <script>
     function init(){ 
      if(typeof(EventSource)!=="undefined"){
        var source = new EventSource('localhost');
        source.onmessage = function(e) {
        document.body.innerHTML += e.data + '<br>';
        };
      }
      else{
        document.body.innerHTML = "Sorry, your browser does not support server-sent events...";
      }
    }
  </script>
<body onload="init()">
</body>
</html>

ここに私のサーバーコード(node.js)があります:

var http = require('http');
var sys = require('sys');
var fs = require('fs');

http.createServer(function(req, res) {

  if (req.headers.accept && req.headers.accept == 'text/event-stream') {
      sendSSE(req, res);
}).listen(80, "127.0.0.1");

function sendSSE(req, res) {
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  });

  var id = (new Date()).toLocaleTimeString();

  // Sends a SSE every 5 seconds on a single connection.
  setInterval(function() {
    constructSSE(res, id, (new Date()).toLocaleTimeString());
  }, 5000);
}

function constructSSE(res, id, data) {
  res.write('id: ' + id + '\n');
  res.write("data: " + data + '\n\n');
  }
4

2 に答える 2

0

node の http モジュールは、Server Sent Events に対して正常に機能し、Node SSE のほとんどのデモ コードがそれを使用します。ただし、いくつかの落とし穴に注意する必要があります。

コンプレッションをオンにしてビビりました。解決策は、各データ メッセージres.flush()の最後に追加することです。res.write()それは簡単な修正なので、別のモジュールを使用して書き直す前に、まずそれを試してみます。

于 2014-09-30T15:18:47.787 に答える