2016-03-27 24 views
1

Node.jsでSSEを実装するすべての方法がより複雑なコードで行われているように見えますが、SSEを送受信する簡単な方法があるようです。これを簡単にするAPIまたはモジュールはありますか?Node.jsでServer Sentイベントを実装する簡単な方法は?

+2

ソケットについてはどうですか? – Daniel

+0

@ダニエル、SSEはHTTPで動作し、HTTPはTCPソケット上で動作します:) "websockets"が適切でしょう。 しかし、今日はSSEを行うライブラリがたくさんあります。私は個人的にhttps://www.npmjs.com/package/@toverux/expresseを作成しました。これは私が既存のパッケージには満足していなかったからです。 –

答えて

0

あなたはSocket.ioを使用してこのようなことを行うことができるはずです。まず、npm install socket.ioでインストールする必要があります。クライアント上の

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('../..')(server); 
var port = process.env.PORT || 3000; 

server.listen(port, function() { 
    console.log('Server listening at port ' + port); 
}); 

app.use(express.static(__dirname + '/public')); 

io.on('connection', function (socket) { 
    socket.emit('EVENT_NAME', {data}); 
}); 

そして、このような何か:

そこから、あなたのコードでは、あなたはあなたがサーバー上でこのようなものを使用することができ more in-depth examples given by Socket.IO

見ることができますvar io = require(socket.io);

を持っていることになるでしょう

<script src="socket_src_file_path_here"></script> 
<script> 
    var socket = io('http://localhost'); 
    socket.on('EVENT_NAME', function (data) { 
    console.log(data); 
    //Do whatever you want with the data on the client 
    }); 
</script> 
+1

例を参考にしていただき、ありがとうございます! – Jasch1

+7

私は絶対に**このアプローチに反対しています!私はSocket.IOを長い間使用しています。時間が経つにつれて戦い始める苦痛があると確信しています。サーバーサイドイベントは**単方向**であり、ソケットは**双方向**です。 1つは要求応答タイプで、もう1つはロングタイプの接続です。違いは大きいので、ソケットは必要ありません。再接続、スパム保護、サーバーのダウン、おそらくクラスタリングに対処する必要があります。シンプルなSSEで動く、すでにブラウザに実装されている!それについての他の答えを見てください! –

+2

OPはウェブソケットではなくSSEを求めました。 – krulik

6

サーバーから送信されるイベントはかなりシンプルです。ちょうどそれについての私の2つの部分のブログ記事を見てください。

  1. http://bayn.es/real-time-web-applications-with-server-sent-events-pt-1/
  2. http://bayn.es/real-time-web-apps-with-server-sent-events-pt-2/
+1

少し複雑にもかかわらず、私はRedisを使う考えが好きです。セットアップが簡単で、非常に強力で堅牢なソリューションです。それはチャネルとそれの内部機能を使用してすべての開発の必要性を取り除くでしょう。時間の学習に投資する価値があります。良い例え! –

0
**client.js** 

var eventSource = new EventSource("/route/events"); 
eventSource.addEventListner("ping", function(e){log(e.data)}); 

//if no events specified 
eventSource.addEventListner("message", function(e){log(e.data)}); 

**server.js** 

http.createServer((req, res)=>{ 

    if(req.url.indexOf("/route/events")>=){ 

     res.setHeader('Connection', 'keep-alive'); 

     res.setHeader("Cache-Control", "no-cache"); 

     res.setHeader("Content-Type", "text/event-stream"); 

     let event = "event: ping"; 

     let id = `id: ${Date.now()}`; 

     let data = { 
     message:`hello @${new Date().toString()}` 
     } 

     data = "data: "+JSON.stringify(data); 

     res.end(`${event}\n${id}\n${data}\n\n`); 
    } 
}).listen(PORT) 
関連する問題