springboot集成websokcet+H5开发聊天原型(一)

1. 整体思路

群组聊天功能实现思路
  • 需要为每个群组维护一个对应的集合(可以是 Set 等数据结构),用来存放该群组内所有在线用户的 WebSocketSession。当有消息发送到群组时,遍历该群组对应的集合,向其中的每个在线用户发送消息。
  • 在消息结构体中新增一个字段用于标识所属群组,以便后端根据这个字段来进行消息的广播分发。
离线用户处理及历史消息推送思路
  • 对于离线用户,当他们重新上线时,需要能够识别出他们之前所在的群组(可以通过用户登录等操作记录其关联群组信息)。
  • 后端要将该群组在其离线期间产生的历史消息查询出来(这可能涉及到数据库操作,将群组聊天消息存储到数据库中以便查询历史记录),然后通过 WebSocket 连接将这些历史消息逐一发送给重新上线的用户。

后端代码修改思路

1. 群组管理与消息处理

  • 群组数据结构:使用合适的数据结构(如 Map)来存储群组相关信息,以群组 ID 作为键,对应的值可以是包含该群组内在线用户 WebSocketSession 列表以及群组历史消息列表等信息的对象。
  • 消息格式定义:明确消息的格式,使其能区分是文字消息还是图片消息,并且包含必要的元数据,比如发送者、群组 ID、消息内容(文字内容或图片链接等)、时间戳等。
  • 消息分发逻辑:当接收到消息时,根据消息中的群组 ID,找到对应的群组在线用户列表,然后将消息发送给这些用户。
2. 离线用户历史消息处理

  • 用户与群组关联记录:维护用户与所属群组的关联关系,比如使用 Map 存储用户 ID 和其所属群组 ID 列表的对应关系,以便在用户重新上线时确定需要推送哪些群组的历史消息。
  • 历史消息存储与查询:将群组内的聊天消息持久化存储(实际应用中通常是存入数据库,这里可简单模拟存储结构),当离线用户重新上线时,从存储结构中查询出其所属群组的历史消息并推送给他。

直接 springboot+websokcet,感觉比原生的websocket简单一点。

  1.  集成websokcet
  2.  配置文件
  3.  handler
  4. postman测试一下
  5.  uniapp

pom添加依赖:

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

application.yml中 端口配置(先复用应用的端口吧)

server:
  port: 7877
  tomcat:
    accept-count: 10000
    threads:
      max: 800
      min-spare: 200
  compression:
    enabled: true
  servlet:
    context-path: /chat

配置文件(application.yml)

  • 务器端口及相关配置
    • server.port 配置为 7877,指定了 Spring Boot 应用启动后监听的端口号。
    • server.tomcat.accept-count 设置为 10000,它表示当所有的处理线程都在使用时,能够放到处理队列中的连接请求数量。server.tomcat.threads.max 设为 800 定义了最大线程数,min-spare 设为 200 则是最小备用线程数,这些配置用于优化 Tomcat 处理请求的线程资源分配。
    • server.compression.enabled 设为 true,开启了服务器响应内容的压缩功能,有助于减少网络传输的数据量,提高性能。
    • server.servlet.context-path 配置为 /chat,意味着应用的上下文路径是 /chat,后续访问应用中的资源路径都是基于这个上下文路径来构建的。

WebSocket 配置类(WebSocketConfig)

  • 这个类实现了 WebSocketConfigurer 接口,用于配置 WebSocket 相关的处理。
  • 在 registerWebSocketHandlers 方法中,将自定义的 MyWebSocketHandler 注册到了 WebSocket 处理器注册表 WebSocketHandlerRegistry 中,并且将 WebSocket 的端点路径设置为 /websocket,同时允许来自任意源(setAllowedOrigins("*"))的连接访问该 WebSocket 端点。
package com.edwin.java.config;


import com.edwin.java.config.interceptor.GroupChatInterceptor;
import com.edwin.java.util.MyWebSocketHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    /**
     * registerWebSocketHandlers 是一个函数或方法,通常用于在 Web 应用程序中注册 WebSocket 处理程序。
     * WebSocket 是一种基于 TCP 的协议,可以实现客户端和服务器之间的双向通信,可以用于实时应用程序,如聊天应用、游戏、实时更新等。在 Java Web 应用程序中,可以使用 Spring 框架提供的 WebSocket 支持来处理 WebSocket 连接。
     * registerWebSocketHandlers 方法是 Spring WebSocket 的一个 API,它允许开发人员在应用程序中注册 WebSocket 处理程序,并将其映射到特定的 U
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值