React+SSE+数据流形式输出

1. 什么是SSE

  • sse基于http协议,是一种服务端主动向客户端推送消息得技术。

2. SSE和Websocket区别

  • SSE基于http协议,只能服务端单向推送消息。可以传输文本消息, 短线后可以自动重连
  • websocket基于TCP协议,支持接收和发送消息, 可传得消息类型广泛,需要额为部署(心跳机制)

3. 使用方法

  • 实现了一个输入一个问题,随机生成一首诗
  • 
    import React, { useState } from "react";
    
    const ChatRoom = () => {
      const [messages, setMessages] = useState([]);
      const [qusetion, setquestion] = useState("");
    
      const formateMessage = (data) => {
        const result = data.split("");
        result.forEach((charaacter, index) => {
          setTimeout(() => {
            setMessages((preMesage) => [...preMesage, charaacter]);
          }, 100 * index);
        });
      };
    
      const handSubmit = () => {
     
### 如何在 React 中实现 SSE (Server-Sent Events) 通知 #### 创建 React 组件以接收 SSE 数据 为了使 React 应用能够接收到来自服务器的实时消息,可以创建一个新的组件 `EventStream` 来管理与服务器之间的连接。当组件挂载时建立连接,在卸载前关闭它。 ```javascript import { useEffect, useState } from 'react'; function EventStream() { const [messages, setMessages] = useState([]); useEffect(() => { let eventSource; if ('EventSource' in window) { eventSource = new EventSource('/stream'); // 假设这是后端提供的流URL eventSource.onmessage = function(event) { console.log('New message:', JSON.parse(event.data)); setMessages(prevMessages => [...prevMessages, JSON.parse(event.data)]); }; eventSource.onerror = function(error) { console.error('Error occurred with the stream', error); try { eventSource.close(); } catch (_) {} }; return () => { if (eventSource && eventSource.readyState === 1 /* OPEN */) { eventSource.close(); // 清理工作:断开连接 } }; } }, []); return ( <div> <h2>Received Messages:</h2> <ul> {messages.map((msg, index) => <li key={index}>{JSON.stringify(msg)}</li>)} </ul> </div> ); } export default EventStream; ``` 这段代码展示了如何利用 JavaScript 内置对象 `EventSource` 实现基本功能[^2]。每当有新的消息到达时都会触发 `onmessage` 处理函数,并将其添加到状态列表中显示给用户。 对于不支持原生 `EventSource` 接口的老版本浏览器,可以通过引入 polyfill 解决兼容性问题[^3]。 #### 后端准备 确保后端已经配置好了一个持续运行的服务接口 `/stream` ,它可以不断地向客户端发送带有特定格式的消息体。每条记录应该遵循如下结构: ``` data: {"time": "2023-09-25T14:48:32Z", "content":"This is a test"} ``` 注意不同框架有不同的实现细节,请参照具体文档完成这部分开发任务[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值