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