如何在JavaScript中接收服务器发送的事件通知?

如何在JavaScript中接收服务器发送的事件通知?

服务器发送的事件是服务器和客户端之间进行单向通信的一种方式。当我们仅需要从服务器向客户端发送数据,而不需要从客户端向服务器发送数据时,我们可以使用服务器发送的事件。

我们可以通过建立客户端与服务器之间的连接来使用服务器发送的事件。在这里,服务器发送数据,客户端接收数据并处理数据以在网页上显示。服务器可以是任何东西,例如Node、PHP或Ruby应用程序。

因此,当服务器发送数据时,客户端JavaScript上的“message”事件触发,并且数据可以通过事件侦听器处理。

下面是一个示例,演示如何通过服务器发送的事件接收事件通知。

示例

  • 步骤 1 − 首先,我们需要从客户端发送请求到服务器,以建立客户端和服务器之间的连接。

  • 步骤 2 − 创建一个index.html文件。在

<html>
<body>
   <h2>使用<i>服务器发送的事件</i>在JavaScript中进行单向通信。</h2>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      const source = new EventSource('http://localhost:5000/subscribe');
      source.addEventListener('message', message => {
         output.innerHTML += "更新后的消息是:" + message.data + "<br>";
      });
   </script>
</body>
</html>
npm init -y
npm i cors express
const express = require("express");
const cors = require("cors");
const app = express();
// use cors
app.use(cors());
const PORT = 5000;

// array to store all connected clients
let allConnectedClients = [];

// add the client to the list
async function subscribeClient(req, res) {

   // set headers
   const headers = {
      "Content-Type": "text/event-stream",
      Connection: "keep-alive",
   };

   //  adding 200 response code
   res.writeHead(200, headers);

   // create a client object and add it to the list
   const id = Date.now();
   const client = {
      id,
      res,
   };
   allConnectedClients.push(client);
   console.log(`Client is connected Successfully and its id is: {id}`);
   let cnt = 0;

   //  Create data of strings and choose a random string
   let data = [
      "Hello",
      "World",
      "How",
      "Are",
      "You",
      "Today",
      "I",
      "Am",
      "Fine",
   ];
   while (true) {

      // wait for 5 seconds
      await new Promise((resolve) => setTimeout(resolve, 5000));
      console.log("Data updated", ++cnt);

      // send data to the client
      res.write(`data:{data[Math.floor(Math.random() * data.length)]}  

`);
   }
}
// adding endpoints
app.get("/subscribe", subscribeClient);

// run the server
app.listen(PORT, () => {
   console.log(`应用程序在端口${PORT}上监听`);
});
node app.js

输出

运行节点应用程序服务器后,打开或刷新在Web浏览器中打开的index.html文件。用户可以观察到它每5秒打印一次数据。 通过使用服务器发送的事件获得JavaScript通知。在这里,我们每5秒从服务器发送数据,但开发人员只能在数据更新时发送数据。 因此,通过使用服务器发送的事件,我们可以在客户端JavaScript中获得通知,无论何时在服务器端更新了数据。

服务器端事件类似于轮询技术。在轮询中,客户端在每个时间间隔后向服务器发送请求,并请求更新,这会增加服务器的负载,即使服务器没有更新也会发出请求。但服务器发送的事件在数据更新时向客户端发送数据,客户端无需请求服务器更新。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

JavaScript 教程