Java后端主动向前端推送消息.pdfVIP

  • 3
  • 0
  • 约6.46千字
  • 约 4页
  • 2023-09-11 发布于上海
  • 举报
Java后端主动向前端推送消息 后端向前端推送消息就需要长连接,⾸先想到的就是websocket。这⾥推荐⼀个⽐websocket更轻量级的长连接推送实现⽅式: SpringBoot之SseEmitter contrller: //@CrossOrigin //跨域(看具体情况) @RestController @RequestMapping(@RequestMapping( ) public class TestNotify { /** ⽤于创建连接(将⽤户注册到 中) * server */ @GetMapping(@GetMapping( ) public SseEmitter connect(@PathVariable String userId) { return SseEmitterServer.connect(userId); } @GetMapping(@GetMapping( ) public ResponseEntityString push(@PathVariable(name = ) String message) { SseEmitterServer.batchSendMessage(message); return ResponseEntity.ok(( 送消息给所有⼈送消息给所有⼈); } } server: /** 主动向前端推送信息 * * @Date 2021/4/21 */ public class SseEmitterServer { private static final Logger logger = LoggerFactory.getLogger(SseEmitterServer.class); /** 当前连接数 * */ private static AtomicInteger count = new AtomicInteger(0); /** 使⽤ 对象,便于根据 来获取对应的 ,或者放 ⾥⾯ * map userId SseEmitter redis */ private static MapString, SseEmitter sseEmitterMap = new ConcurrentHashMap(); /** 创建⽤户连接并返回 * SseEmitter ⽤户 * @param employeeCode ID * @return SseEmitter */ public static SseEmitter connect(String employeeCode) { 设置超时时间,表⽰不过期。默认 秒,超过时间未完成会抛出异常: // 0 30 AsyncRequestTimeoutException SseEmitter sseEmitter = new SseEmitter(0L); // 注册回调 sseEmitter.onCompletion(completionCallBack(employeeCode)); sseEmitter.onError(errorCallBack(employeeCode)); sseEmitter.onTimeout(timeoutCallBack(employeeCode)); sseEmitterMap.put(employeeCode, sseEmitter); 数量 // +1 count.getAndIncrement();

文档评论(0)

1亿VIP精品文档

相关文档