WebScoket聊天室Springboot版

该博客通过注释详细介绍了如何使用SpringBoot构建WebSocket聊天室,特别关注了语音发送功能。作者首先引入WebSocket相关库,然后开启WebSocket支持,接着创建WebSocket服务器端,并实现了语音的发送控制器。尽管当前语音播放存在延迟问题,作者计划通过直接推送语音buffer来优化,以减少延迟并实现在客户端即时播放。
摘要由CSDN通过智能技术生成

本文是基于注释的案例,对于发送语音采用了类似文件上传下载一样的方式实现,不过播放会有一点儿延迟,正在改进。

1、首先导入webScoket相关的jar

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

2、开启WebScoket支持

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * 开启WebSocket支持
 */
@Configuration
public class WebSocketConfig {
/**
*外置tomcat不需要配置此bean 
*/
   @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}

3、定义一个websocket服务器端

/**
 * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
 * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
 */
@ServerEndpoint(value = "/{room}/{Id}")
@Component
public class MyWebSocket {

    /**
     * 自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的
     */
    private static AtomicInteger room1OnlineCount = new AtomicInteger(0);
    private static AtomicInteger room2OnlineCount = new AtomicInteger(0);
    private static AtomicInteger room3OnlineCount = new AtomicInteger(0);
    /**
     * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
     */
  /*  private static CopyOnWriteArraySet<MyWebSocket> room1WebSocketSet = new CopyOnWriteArraySet<>();
    private static CopyOnWriteArraySet<MyWebSocket> room2WebSocketSet = new CopyOnWriteArraySet<>();
    private static CopyOnWriteArraySet<MyWebSocket> room3WebSocketSet = new CopyOnWriteArraySet<>();
*/
    /**
     * 所有的MyWebSocket对象放在一个map中,方便私聊直接发送
     */
    private static ConcurrentHashMap<Str
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值