Question #5859   Proposée par Answiki le 08/02/2022 à 8:41:53 UTC

Comment implémenter les server-sent event en Node.js?

Answer   Submitted by Answiki on 02/23/2022 at 10:01:30 AM UTC

Pour implémenter les SSE (server-sent event) en Node.js, la meilleure option est d'utiliser Express.js pour créer le server web. Ensuite, une route servira à la transmission des événements (event stream) :

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


Chaque fois que le server doit envoyer un événement, il suffit d'utiliser res.write('data: mettre la donnée à envoyer ici');.


Le code suivant est un exemple complet et fonctionnel écrit en Node.js. Le server envoie l'heure courante ou client toutes les 2 secondes.


Server (index.js)

// Express web server framwork
const express = require('express')
const app = express()

// Static files are in the public folder
app.use(express.static('public'))


// Requests on path /see are processed here
app.get('/sse', function(req, res) {
  
  // Create event(stream header)
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  })

  // Every 2 seconds, send an event with current time
  setInterval(function (res) {
    let date = new Date();    
    res.write('data: The server time is:' + date.toGMTString() + '\n\n');
  }, 2000, res)
})

// Start the server and listen on port 3000
app.listen(3000, () => { console.log ('Server is running on port 3000'); })


Client (/public/index.html)

<h1>SSE demo with PHP</h1>

<ol id="list">
</ol>

<script>
  // Create new event, the server script is sse.php
  var eventSource = new EventSource("/sse");

  // Event when receiving a message from the server
  eventSource.onmessage = function(event) {
    // Append the message to the ordered list
    document.getElementById("list").innerHTML += '<li>'+event.data + "</li>";
  };
</script>

Tester l'exemple en ligne avec repl.it.

7 events in history
Answer by Answiki on 02/23/2022 at 10:01:30 AM

Pour implémenter les SSE (server-sent event) en Node.js, la meilleure option est d'utiliser Express.js pour créer le server web. Ensuite, une route servira à la transmission des événements (event stream) :

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


Chaque fois que le server doit envoyer un événement, il suffit d'utiliser res.write('data: mettre la donnée à envoyer ici');.


Le code suivant est un exemple complet et fonctionnel écrit en Node.js. Le server envoie l'heure courante ou client toutes les 2 secondes.


Server (index.js)

// Express web server framwork
const express = require('express')
const app = express()

// Static files are in the public folder
app.use(express.static('public'))


// Requests on path /see are processed here
app.get('/sse', function(req, res) {
  
  // Create event(stream header)
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  })

  // Every 2 seconds, send an event with current time
  setInterval(function (res) {
    let date = new Date();    
    res.write('data: The server time is:' + date.toGMTString() + '\n\n');
  }, 2000, res)
})

// Start the server and listen on port 3000
app.listen(3000, () => { console.log ('Server is running on port 3000'); })


Client (/public/index.html)

<h1>SSE demo with PHP</h1>

<ol id="list">
</ol>

<script>
  // Create new event, the server script is sse.php
  var eventSource = new EventSource("/sse");

  // Event when receiving a message from the server
  eventSource.onmessage = function(event) {
    // Append the message to the ordered list
    document.getElementById("list").innerHTML += '<li>'+event.data + "</li>";
  };
</script>

Tester l'exemple en ligne avec repl.it.

Answer by Answiki on 02/23/2022 at 09:17:01 AM

Pour implémenter les SSE (server-sent event) en Node.js, la meilleure option est d'utiliser Express.js pour créer le server web. Ensuite, une route servira à la transmission des événements (event stream) :

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


Chaque fois que le server doit envoyer un événement, il suffit d'utiliser res.write('data: mettre la donnée à envoyer ici');.


Le code suivant est un exemple complet et fonctionnel écrit en Node.js. Le server envoie l'heure courante ou client toutes les 2 secondes.


Server (index.js)

// Express web server framwork
const express = require('express')
const app = express()

// Static files are in the public folder
app.use(express.static('public'))


// Requests on path /see are processed here
app.get('/sse', function(req, res) {
  
  // Create event(stream header)
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  })

  // Every 2 seconds, send an event with current time
  setInterval(function (res) {
    let date = new Date();    
    res.write('data: The server time is:' + date.toGMTString() + '\n\n');
  }, 2000, res)
})

// Start the server and listen on port 3000
app.listen(3000, () => { console.log ('Server is running on port 3000'); })


Client (/public/index.html)

<h1>SSE demo with PHP</h1>

<ol id="list">
</ol>

<script>
  // Create new event, the server script is sse.php
  var eventSource = new EventSource("/sse");

  // Event when receiving a message from the server
  eventSource.onmessage = function(event) {
    // Append the message to the ordered list
    document.getElementById("list").innerHTML += '<li>'+event.data + "</li>";
  };
</script>

Tester l'exemple en ligne avec repl.it.


Notons que selon la configuration de PHP, le serveur peut bufferiser les données avant de les transmettre au client. Il faut veiller à ce que les paramètres output_buffering et zlib.output_compression soient désactivés dans le fichier php.ini:

output_buffering = Off
zlib.output_compression = Off


Answer by Answiki on 02/23/2022 at 09:14:52 AM

Pour implémenter les SSE (server-sent event) en Node.js, la meilleure option est d'utiliser Express.js pour créer le server web. Ensuite, une route servira à la transmission des événements (event stream) :

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


Chaque fois que le server doit envoyer un événement, il suffit d'utiliser res.write('data: mettre la donnée à envoyer ici');.


Le code suivant est un exemple complet et fonctionnel écrit en Node.js. Le server envoie l'heure courante ou client toutes les 2 secondes.


Server (index.js)

// Express web server framwork
const express = require('express')
const app = express()

// Static files are in the public folder
app.use(express.static('public'))


// Requests on path /see are processed here
app.get('/sse', function(req, res) {
  
  // Create event(stream header)
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  })

  // Every 2 seconds, send an event with current time
  setInterval(function (res) {
    let date = new Date();    
    res.write('data: The server time is:' + date.toGMTString() + '\n\n');
  }, 2000, res)
})

// Start the server and listen on port 3000
app.listen(3000, () => { console.log ('Server is running on port 3000'); })


Client (/public/index.html)

<h1>SSE demo with PHP</h1>

<ol id="list">
</ol>

<script>
  // Create new event, the server script is sse.php
  var eventSource = new EventSource("/sse");

  // Event when receiving a message from the server
  eventSource.onmessage = function(event) {
    // Append the message to the ordered list
    document.getElementById("list").innerHTML += '<li>'+event.data + "</li>";
  };
</script>

Tester l'exemple en ligne avec repl.it.


Notons que selon la configuration de PHP, le serveur peut bufferiser les données avant de les transmettre au client. Il faut veiller à ce que les paramètres output_buffering et zlib.output_compression soient désactivés dans le fichier php.ini:

output_buffering = Off
zlib.output_compression = Off


Answer by Answiki on 02/08/2022 at 08:48:36 AM

Pour implémenter les SSE (server-sent event) en Node.js, la meilleure option est d'utiliser Express.js pour créer le server web. Ensuite, une route servira à la transmission des événements (event stream) :

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


Chaque fois que le server doit envoyer un événement, il suffit d'utiliser res.write('data: mettre la donnée à envoyer ici');.


Le code suivant est un exemple complet et fonctionnel écrit en Node.js. Le server envoie l'heure courante ou client toutes les 2 secondes.


Server (index.js)

// Express web server framwork
const express = require('express')
const app = express()

// Static files are in the public folder
app.use(express.static('public'))


// Requests on path /see are processed here
app.get('/sse', function(req, res) {
  
  // Create event(stream header)
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  })

  // Every 2 seconds, send an event with current time
  setInterval(function (res) {
    let date = new Date();    
    res.write('data: The server time is:' + date.toGMTString() + '\n\n');
  }, 2000, res)
})

// Start the server and listen on port 3000
app.listen(3000, () => { console.log ('Server is running on port 3000'); })


Client (/public/index.html)

<h1>SSE demo with PHP</h1>

<ol id="list">
</ol>

<script>
  // Create new event, the server script is sse.php
  var eventSource = new EventSource("/sse");

  // Event when receiving a message from the server
  eventSource.onmessage = function(event) {
    // Append the message to the ordered list
    document.getElementById("list").innerHTML += '<li>'+event.data + "</li>";
  };
</script>

Tester l'exemple en ligne avec repl.it.

Question by Answiki 02/08/2022 at 08:47:07 AM
Comment implémenter SSE (server-sent event) en Node.js?
Answer by Answiki on 02/08/2022 at 08:46:52 AM

Pour implémenter les SSE (server-sent event) en Node.js, la meilleure option est d'utiliser Express.js pour créer le server web. Ensuite, une route servira à la transmission des événements (event stream) :

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


Chaque fois que le server doit envoyer un événement, il suffit d'utiliser res.write('data: mettre la donnée à envoyer ici');.


Le code suivant est un exemple complet et fonctionnel écrit en Node.js. Le server envoie l'heure courante ou client toutes les 2 secondes.


Server (index.js)

// Express web server framwork
const express = require('express')
const app = express()

// Static files are in the public folder
app.use(express.static('public'))


// Requests on path /see are processed here
app.get('/sse', function(req, res) {
  
  // Create event(stream header)
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  })

  // Every 2 seconds, send an event with current time
  setInterval(function (res) {
    let date = new Date();    
    res.write('data: The server time is:' + date.toGMTString() + '\n\n');
  }, 2000, res)
})

// Start the server and listen on port 3000
app.listen(3000, () => { console.log ('Server is running on port 3000'); })


Client (/public/index.html)

<h1>SSE demo with PHP</h1>

<ol id="list">
</ol>

<script>
  // Create new event, the server script is sse.php
  var eventSource = new EventSource("/sse");

  // Event when receiving a message from the server
  eventSource.onmessage = function(event) {
    // Append the message to the ordered list
    document.getElementById("list").innerHTML += '<li>'+event.data + "</li>";
  };
</script>

Tester l'exemple en ligne avec repl.it.

Question by Answiki 02/08/2022 at 08:41:53 AM
Comment implémenter les server-sent event en Node.js?
# ID Query URL Count

Icons proudly provided by Friconix.