SSE(Server-Sent Events)替代WebSocket实现直播间实时评论功能

平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。

01 引言

SSE是一种用于实现服务器向客户端实时单向推送数据的Web技术。基于HTTP协议,允许服务器将数据以事件流(Event Stream)的形式发送给客户端。客户端通过建立持久的HTTP连接,并监听事件流,可以实时接收服务器推送的数据。

因为是Web技术,且通过Http协议的建立连接。所以它的适用性更强,基础的网络环境都可支持。本文采用SSE技术代替WebSocket,看看实现的效果。

至于SSE的详细介绍,我之前写过一篇文章,可以参考:

https://blog.csdn.net/static_coder/article/details/133347359

02 Maven依赖的引入

由于SSE是Web技术,所以只需要引入Web即可,无需第三方依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

03 SSE的最佳实践

SSE不需要额外的配置,就像正常的Http请求一样丝滑。

3.1 SSE建立连接

public static final ConcurrentHashMap<String, SseEmitter> SSE_MAP = new ConcurrentHashMap<>();

@GetMapping("/connect")
public SseEmitter sseEmitter() throws IOException {
   
    log.info("SSE连接建立成功......");
    SseEmitter emitter = new SseEmitter(0L);
    // 链接建立完成之后,需要发送消息给客户端
    String sseEmitterId = UUID.randomUUID().toString();
    SSE_MAP.put(sseEmitterId, emitter);

    // 发送消息,发送客户端的唯一标识会给客户端
    Map<String, Object> msgMap = new HashMap<>();
    msgMap.put("clientId", sseEmitterId);
    emitter.send(SseEmitter.event().data(JSON.toJSONString(msgMap)));

    // 发送进入直播间的消息
    noticeClient(sseEmitterId, sseEmitterId.substring(0, 5) + "*** 进入了直播间");

    emitter.onCompletion(() -> {
   
        log.info("SSE操作完毕,连接关闭");
        SSE_MAP.remove(sseEmitterId);
        // 发送离开直播间的消息
        noticeClient(sseEmitterId, sseEmitterId.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值