、私はserver sent eventsの概念つまずきました。これはsocket.ioのように(非常に簡単な方法で説明されていますが)、名前からもわかるように、サーバーからクライアントへの一方通行のみです。 SSEはHTTP経由で完全にオーバーグレードされるため、Webソケットは必要ありません。
ミドルウェア構成:
module.exports = function (req, res, next) {
res.sseSetup = function() {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
res.connection.setTimeout(10800000);
};
res.sseSend = function(data) {
res.write("data: " + JSON.stringify(data) + "\n\n");
};
next();
}
今(通常はあなたのapp.jsで)明示してあなたのミドルウェアを登録します。
app.use(require('./middlewares/sse'));
し、必要なルーティングハンドラを追加します。
router.get('/time', function(req, res) {
res.sseSetup();
setInterval(function() {
// create your time object - here: {time: 11:30:01}
res.sseSend(timeObject);
},1000);
});
クライアント側のコード:
<script>
if(!!window.EventSource) {
var timeSource = new EventSource('/time');
timeSource.addEventListener('message', function(event) {
var data = JSON.parse(event.data);
$('.time').text(data.time);
}, false);
}
else {
console.log("[ERROR](server) Your browser does not support SSE");
}
この場合のデータ・オブジェクトは次のようになります
{
time: '11:30:01'
}
と拡張することができる/意志に調整。
乾杯!
ハンドベルでは決して扱われませんでしたが、そこにはJavaScriptがありません。 SettimeoutまたはsetIntervalはジョブを完了しました –
@sacDahal:しかし、setTimeoutまたはsetIntervalを使用するのはクライアント側でのみ有効でしょうか?しかし、ユーザーのマシンに間違った時間が設定されていると、間違った時間がページに表示されます – Beejay