【教程】JFinal中SseEmitter用法

JFinal里的SseEmitter有两种场景使用方式

都是在Controller里,因为SSE基于http。

一、主线程里推送数据到客户端

xxxxxxxxxxxxxx.jpg


  1. /**
  2.  * 主线程里
  3.  * 测试本地发送文本打字机
  4.  */
  5. public void sse1() throws InterruptedException {
  6.     //创建sse
  7.     SseEmitter sseEmitter = new SseEmitter(getResponse());
  8.     //主线程里拿到数据推送消息
  9.     String[] datas = msg.split("");
  10.     for(String data:datas){
  11.         //推送
  12.         sseEmitter.sendMessage(data);
  13.         Thread.sleep(50);
  14.     }
  15.     //sse完成
  16.     sseEmitter.complete();
  17.     //结束response
  18.     renderNull();
  19. }


二、子线程里异步处理资源数据准备然后异步推送

这种情况需要主线程等待子线程完成。

haha2004.jpg

  1. /**
  2.  * 异步子线程模拟
  3.  * 测试本地发送文本打字机
  4.  */
  5. public void sse2(){
  6.     //创建sse
  7.     final SseEmitter sseEmitter = new SseEmitter(getResponse());
  8.     //模拟chatgptapi 异步调用返回
  9.     new Thread(new Runnable() {
  10.         public void run() {
  11.             String[] datas = msg.split("");
  12.             for(String data:datas){
  13.                 //推送 异步子线程里推送数据给客户端
  14.                 sseEmitter.sendMessage(data);
  15.                 try {
  16.                     Thread.sleep(50);
  17.                 } catch (InterruptedException e) {
  18.                     throw new RuntimeException(e);
  19.                 }
  20.             }
  21.             //完成sse 告知主线程已经完成
  22.             sseEmitter.complete();
  23.         }
  24.     }).start();
  25.     //锁住等待子线程推送完成
  26.     sseEmitter.waiting(100);
  27.     renderNull();
  28. }




JFinal-SSE 视频演示:

JFinal+SSE+openAI实现完整ChatGPT

JFinal-ChatGpt项目演示:

【新】JFinal-ChatGPT项目进展和案例



JBolt极速开发平台,省心,省事儿,极速开发,JFinal社区近1000家企业的选择!

JBolt AI (http://jboltai.com)帮助软件开发团队和企业实现数智化开发转型,应对未来之大变局


咨询可联系

小木微信:18766735632

评论区

zzutligang

2024-10-22 16:27

@山东小木 SseEmitter这个类里的waiting方法最后一行有一句System.out.println("Waiting finished");能不能下次更新发布jfinal的时候,把这句代码注释掉?

山东小木

2024-10-24 00:26

@zzutligang 已处理提交PR 看PR

zzutligang

2024-10-24 09:51

热门分享

扫码入社