HTML 5-EventSourceサービス側プッシュイベント
1897 ワード
イベントソースを初期化し、イベントを受け入れるURLを指定します.
メッセージの傍受:
サーバ側nodejs実装:ヘッダ「Content-Type」を「text/event-stream」 に設定フィールド:各イベント間は空の行で区切られます.
フィールドは空白で、行がコメントであることを示し、処理時に無視されます.event:イベントを宣言する行のタイプを表します.ブラウザは、データを受信すると、対応するタイプのイベントを生成します.data:メッセージのデータフィールド.このメッセージに複数のdataフィールドが含まれている場合、クライアントは改行でフィールド値として文字列に接続します.id:イベントIDは、現在のEventSourceオブジェクトの内部属性「最後のイベントID」の属性値となります.retry:再接続の時間(ミリ秒単位)を指定する整数値で、フィールドの値が整数でない場合は無視されます.
var evtSource = new EventSource("/sendMessage");
メッセージの傍受:
//
evtSource.onmessage = function (e) {
console.log(e.data);
}
//
evtSource.onopen = function () {
console.log("Server open")
}
//
evtSource.onerror = function () {
console.log("Error")
}
//
evtSource.addEventListener("myEvent", function (e) {
console.log(e.data);
}, false)
サーバ側nodejs実装:
フィールドは空白で、行がコメントであることを示し、処理時に無視されます.event:イベントを宣言する行のタイプを表します.ブラウザは、データを受信すると、対応するタイプのイベントを生成します.data:メッセージのデータフィールド.このメッセージに複数のdataフィールドが含まれている場合、クライアントは改行でフィールド値として文字列に接続します.id:イベントIDは、現在のEventSourceオブジェクトの内部属性「最後のイベントID」の属性値となります.retry:再接続の時間(ミリ秒単位)を指定する整数値で、フィールドの値が整数でない場合は無視されます.
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
if(req.url === '/sendMessage') {
res.writeHead(200, {
"Content-Type": "text/event-stream" //
});
setInterval(function () {
res.write(
//
"data:" + new Date().toLocaleTimeString() + "
" + // “
”
//
": ' !'" + "
" +
"event: myEvent" + "
" +
"data:" + new Date().toLocaleString() + "
"
);
}, 1000);
} else {
fs.readFile('./index.html', function (err, content) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(content, 'utf-8');
});
}
}).listen(3000);