JFinal里的SseEmitter有两种场景使用方式
都是在Controller里,因为SSE基于http。
一、主线程里推送数据到客户端

/**
* 主线程里
* 测试本地发送文本打字机
*/
public void sse1() throws InterruptedException {
//创建sse
SseEmitter sseEmitter = new SseEmitter(getResponse());
//主线程里拿到数据推送消息
String[] datas = msg.split("");
for(String data:datas){
//推送
sseEmitter.sendMessage(data);
Thread.sleep(50);
}
//sse完成
sseEmitter.complete();
//结束response
renderNull();
}二、子线程里异步处理资源数据准备然后异步推送
这种情况需要主线程等待子线程完成。

/**
* 异步子线程模拟
* 测试本地发送文本打字机
*/
public void sse2(){
//创建sse
final SseEmitter sseEmitter = new SseEmitter(getResponse());
//模拟chatgptapi 异步调用返回
new Thread(new Runnable() {
public void run() {
String[] datas = msg.split("");
for(String data:datas){
//推送 异步子线程里推送数据给客户端
sseEmitter.sendMessage(data);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
//完成sse 告知主线程已经完成
sseEmitter.complete();
}
}).start();
//锁住等待子线程推送完成
sseEmitter.waiting(100);
renderNull();
}JFinal-SSE 视频演示:
JFinal-ChatGpt项目演示:
JBolt极速开发平台,省心,省事儿,极速开发,JFinal社区近1000家企业的选择!
JBolt AI (http://jboltai.com)帮助软件开发团队和企业实现数智化开发转型,应对未来之大变局
咨询可联系
小木微信:18766735632
