常见的实时消息推送方案

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Accept: text/event-stream 表示可接收事件流类型
Cache-Control: no-cache 禁用任何的事件缓存
Connection: keep-alive 表示正在使用持久连接

在这里插入图片描述

 /**
  * 创建连接sse
  *
  */
 public SseEmitter connect() {

     final String clientId = UUID.randomUUID().toString().replace("-", "");

     SseEmitterUTF8 sseEmitter = new SseEmitterUTF8(0L);
       try {
           sseEmitter.send(SseEmitter.event().comment("创建连接成功 !!!"));
       } catch (Exception e) {
           logger.error("创建连接失败 , {} ", e.getMessage());
       }
       
      sseEmitter.onCompletion(() -> {
          logger.info("connect onCompletion , {} 结束连接 ...", clientId);
          removeClient(clientId);
      });
      
      sseEmitter.onTimeout(() -> {
          logger.info("connect onTimeout , {} 连接超时 ...", clientId);
          removeClient(clientId);
      });
      
      sseEmitter.onError((throwable) -> {
          logger.error("connect onError , {} 连接异常 ...", clientId);
          removeClient(clientId);
      });
      
      sseCache.put(clientId, sseEmitter);
    return sseEmitter;
 }

在这里插入图片描述

#请求建立长链接
new WebSocket("ws://192.168.27.201:8080/ws/connect“)

在这里插入图片描述

#建立连接、接受数据、关闭连接
@ServerEndpoint("/ws/connect")      //类似restful中的@RequestMapping
@Component
public class WebsocketServer {
    public static ConcurrentHashMap<String,Session> clintsMap = new ConcurrentHashMap<>();

    @OnOpen
    public void onOpen(Session session, @PathParam("token")String token){
        System.out.println("客户端开始建立连接:"+token);
        clintsMap.put(token, session);
    }

    @OnMessage
    public void onMessage(String msg,  @PathParam("token")String token){
        System.out.println("客户端:"+token + "发送信息给服务器:" + msg);
    }

    @OnClose
    public void onClose(@PathParam("token")String token){
        System.out.println("客户端关闭连接:"+token);
        clintsMap.remove(token);
    }

    @OnError
    public void onError(Throwable e){
        System.out.println("客户端连接发生异常");
    }

}

#配置
@Configuration
public class WebSocketConfiguration {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值