前端流式输出3种实现

打印 上一主题 下一主题

主题 996|帖子 996|积分 2988

在前端开发中,流式输出(streaming output)通常是指逐步输出数据,而不是等待所有数据预备好后一次性显示。这种技术在处理大型数据集、实时数据或需要逐步加载内容的情况下非常有用。下面介绍几种实现流式输出的方法,包括使用 Fetch API 和 EventSource。
1. 使用 Fetch API 实现流式输出

通过 Fetch API 和可读流(Readable Streams),可以在响应到达时逐步读取和处理数据。这在处理大文件或实时更新时非常有用。
示例代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Stream Output Example</title>
  7. </head>
  8. <body>
  9.     <h1>Streamed Output</h1>
  10.     <div id="output"></div>
  11.     <script>
  12.         async function streamData() {
  13.             const response = await fetch('https://jsonplaceholder.typicode.com/posts');
  14.             const reader = response.body.getReader();
  15.             const outputDiv = document.getElementById('output');
  16.             let result;
  17.             // 读取数据流
  18.             while (!(result = await reader.read()).done) {
  19.                 const chunk = new TextDecoder().decode(result.value);
  20.                 // 将新接收到的部分添加到输出
  21.                 outputDiv.innerHTML += chunk + '<br>';
  22.             }
  23.         }
  24.         streamData();
  25.     </script>
  26. </body>
  27. </html>
复制代码
2. 使用 Server-Sent Events (SSE)

Server-Sent Events (SSE) 是一种技术,可以从服务器向客户端推送实时数据。它基于HTTP协议,使用EventSource API。
示例代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>SSE Example</title>
  7. </head>
  8. <body>
  9.     <h1>Server-Sent Events Example</h1>
  10.     <div id="output"></div>
  11.     <script>
  12.         const outputDiv = document.getElementById('output');
  13.         const eventSource = new EventSource('https://example.com/sse'); // 替换为你的SSE服务URL
  14.         eventSource.onmessage = function(event) {
  15.             outputDiv.innerHTML += 'Received: ' + event.data + '<br>';
  16.         };
  17.         eventSource.onerror = function(event) {
  18.             console.error('Error occurred:', event);
  19.             eventSource.close(); // 关闭连接
  20.         };
  21.     </script>
  22. </body>
  23. </html>
复制代码
3. 使用 WebSockets

WebSockets 提供了全双工通信,允许在客户端和服务器之间举行实时数据传输。这适用于需要双向通信的场景。
示例代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>WebSocket Example</title>
  7. </head>
  8. <body>
  9.     <h1>WebSocket Example</h1>
  10.     <div id="output"></div>
  11.     <script>
  12.         const outputDiv = document.getElementById('output');
  13.         const socket = new WebSocket('wss://example.com/socket'); // 替换为你的WebSocket服务URL
  14.         socket.onopen = function() {
  15.             console.log('WebSocket connection established');
  16.         };
  17.         socket.onmessage = function(event) {
  18.             outputDiv.innerHTML += 'Received: ' + event.data + '<br>';
  19.         };
  20.         socket.onerror = function(error) {
  21.             console.error('WebSocket error:', error);
  22.         };
  23.         socket.onclose = function() {
  24.             console.log('WebSocket connection closed');
  25.         };
  26.     </script>
  27. </body>
  28. </html>
复制代码
总结



  • Fetch API:得当在HTTP响应中逐步获取和处理数据流。
  • Server-Sent Events:用于从服务器推送实时变乱,简单易用。
  • WebSockets:提供双向通信,得当需要实时交互的应用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表