EventSource的使用

什么是EventSource
EventSource 是一个用于服务器推送事件(Server-Sent Events, SSE)的接口,它允许服务器推送实时更新到浏览器。与 WebSocket 不同,SSE 是单向的(服务器到客户端),适用于更新频率不高的实时通知、消息推送等场景。下面是关于 EventSource 的详细介绍,包括使用示例和注意事项。

基本概念:服务器向客户端推送实时更新,而不需要客户端发起请求。
使用案例
(使用场景:前端页面需要一次性渲染大数据量时,不能一次性返回,需要服务器不断向前端推送)

  const pageSize = '1000';
    const cstId = params;
    const pageNum = '1';
    const url = `${process.env.VUE_APP_BASE_URL}api/url?pageSize=${pageSize}&cstId=${cstId}&pageNum=${pageNum}`;
    eventSource.value = new EventSource(url)
    eventSource.value.onmessage = (event) => {
        try {
          const message = JSON.parse(event.data);
          const dataAll = []
          if (message.code === 'DONE') {
            eventSource.value?.close()
            return
          }
          dataAll.push(message.data ? message.data : []);
          dataAll.forEach((item: any) => {
            data.value = [...data.value, ...item]
          })
        } catch (error) {
          eventSource.value?.close()
          console.error('Error parsing message:', error);
        }
      };
      
      eventSource.value.onerror = (error) => {
        console.log('SSE connection error:', error);
        eventSource.value?.close()
      }
      
 //记得在离开页面前销毁,否则造成内存溢出
onUnmounted(() => {
  if (eventSource.value) {
    eventSource.value.close()
  }
})
以下是 okhttp-eventsource使用示例: 1. 添加依赖 在项目的 build.gradle 文件中添加以下依赖: ```groovy implementation 'com.squareup.okhttp3:okhttp:版本号' implementation 'com.github.morihacky:okhttp-eventsource:版本号' ``` 2. 创建 EventSource ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://example.com/events") .build(); EventSource eventSource = new EventSource.Builder(callback, request) .build(); ``` 3. 实现回调 ```java EventSource.Listener callback = new EventSource.Listener() { @Override public void onOpen(EventSource eventSource, Response response) { // 连接成功 } @Override public void onMessage(EventSource eventSource, String id, String type, String data) { // 处理消息 } @Override public void onComment(EventSource eventSource, String comment) { // 处理注释 } @Override public boolean onRetryTime(EventSource eventSource, long milliseconds) { // 确定是否重新连接 return true; } @Override public boolean onRetryError(EventSource eventSource, Throwable throwable, Response response) { // 确定是否重新连接 return true; } @Override public void onClosed(EventSource eventSource) { // 连接关闭 } @Override public void onFailure(EventSource eventSource, Throwable t, Response response) { // 连接失败 } }; ``` 4. 连接和关闭 ```java // 连接 eventSource.start(); // 关闭 eventSource.close(); ``` 以上就是 okhttp-eventsource使用示例。通过这个库,你可以轻松地实现 SSE(Server-Sent Events)协议,从服务器实时接收信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值